Ubuntu15.10中安装hadoop2.7.2安装手册

太初

目录

1.      Hadoop单点模式... 2

1.1        安装步骤... 2

0.环境和版本... 2

1.在ubuntu中创建hadoop用户... 2

2.安装ssh. 3

3.安装java环境... 3

4.安装hadoop. 4

5.测试... 5

2.      Hadoop伪分布式... 5

2.1        安装步骤... 5

0.环境和版本... 6

1.      配置core-site.xml文件... 6

2.      配置hdfs-site.xml文件... 6

3.      格式化namenode. 7

4.      启动HADOOP. 7

5.      JPS命令验证HADOOP进程... 8

6.      WEB界面查HDFS信息... 8

7.      通过命令操作HDFS文件系统... 9

8.      测试... 9

3.      Hadoop伪分布式(+YARN)... 10

3.1        安装步骤... 10

4.      Hadoop集群... 12

4.1        安装步骤... 12

5.      其他补充... 18

6.1        LINUX经验... 18

6.1.1         开启bash的自动完成功能... 18

6.1.2         开启ubuntu虚拟机和win10宿主机的vmware tool(共享文件)... 18

6.1.3         Ubuntu的Terminal快捷方式... 19

6.1.4         Find命令举例... 19

6.1.5         PATH变量简述... 19

6.1.6         Ubuntu中安装vmware tools. 19

6.2        杂... 19

6.2.1         如何保存被禁止拷贝或存盘的HTML?... 19

6.      资料... 20

 

 

 

 

特别说明:

本文档是笔者研究了大量网络资料,然后自己实践成功后,汇总各方资料的结果。总结和分享的目的只有一个,让其他学友能少走弯路,集中精力解决业务问题,而不是环境搭建问题。在本文中引用了很多网络资料,图片,名称,信息等内容,如果涉及版权问题,请原作者及时联系并告知。谢谢。

       “资料”章节收纳了本文用到后未用到的资源和连接,用于分享。

        因能力所限,错漏之处敬请见谅。

 感谢网络各位大神的信息分享,是你们的努力推动者技术的发展!

[Spark安装运行手册随后贴上,谢谢!]

 

1.   Hadoop单点模式

1.1   安装步骤

0.环境和版本

ubuntu 15.10

jdk 1.8.84

hadoop 2.7.2

1.在ubuntu中创建hadoop用户

(备注:在GUI(图形)界面中可用“ctrl+Alt+T”快捷键打开Terminal(终端窗口),并输入下列命令。)

在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,粘贴是 ctrl+shift+v;拷贝是ctrl+shift+c;等等)

$ sudo useradd -m hadoop -s /bin/bash //新建hadoop用户

$ sudo passwd hadoop //修改密码为hadoop,等于账号,方便操作;

$ sudo adduser hadoop sudo //为hadoop增加管理员的权限,以免之后出现权限问题。

(备注:也可打开sudoers文件,给hadoop用户赋予和root一样的权限:$sudo gedit /etc/sudoers  ;然后编辑增添如下那句hadoop   ALL(ALL:ALL)  ALL

【重要】GUI中注销当前账户(root或Ubuntu安装初始用户,我这里是ya),并随后用hadoop再次登陆。

(可选:$sudo apt-get update //因为会用apt按照其他软件,如果未更新apt,有可能无法安装其他软件,可选!)

若出现如下 “Hash校验和不符” 的提示,可通过更改软件源来解决。若没有该问题,则不需要更改。

解决办法:【系统设置】(齿轮图标),选择【软件和更新】,点击 “下载自” 右侧的方框,选择【其他节点】,选择服务器,在列表中选中【mirrors.aliyun.com】,并点击右下角的【选择服务器】,会要求输入用户密码,输入即可。点击关闭后,此时会提示列表信息过时,点击【重新载入】,耐心等待更新缓存。完成会自动关闭【软件和更新】这个窗口。再尝试按照apt。如果还是提示错误,请选择其他服务器节点如 mirrors.163.com再尝试。更新成功后,再次执行 sudo apt-get update 就正常了。

 

2.安装ssh

$sudo apt-get install openssh-server //在Terminal中允许命令,下同

(备注:用yes来continue继续安装,一般install安装包默认都选y或yes就可)

(备注:Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server

$sudo /etc/init.d/ssh start //安装好ssh服务后就打开它(尚未放入自启动!)

$ ps -e | grep ssh  //查看ssh服务是否正确启动

$ ssh-keygen -t rsa -P ""   //设置免密码登录,【在输入路径那儿直接回车!】

(备注:原理可能是设定空字符串为基础来生成的密钥对!)

(备注:在/home/hadoop/.ssh里面生成两个文件 id_rsa、id_rsa.pub,前者是私钥,后者是公钥)

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  //将公钥追加到authorized_keys里面

(备注:它保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容;“~”波折号代表用户主文件夹;)

$ssh hadoop@localhost //登录ssh(其他linux的Terminal重也可尝试如此操作:ssh hadoop@(IP|HOSTNAME);

(备注:第一次需要输入yes,确认初次登录,后续不用。)

$exit //退出ssh

(备注:userA@linuxPC1通过ssh登录了userB@linuxPC2,那么就登录uesrA获得了userB的权限,并等价于userB通过Terminal在linuxPC2上执行命令,此为ssh方便功能之一)

 

3.安装java环境

下载jdk二进制编译包

下载用wget软件,wget软件在ubuntu下的安装命令如下:

sudo apt-get install wget  //按照wget程序,可直接通过“wget url链接 -o 输出文件名”来下载“*.tar.gz”。

(备注:举例用wget下载jdk包的命令格式为:wget http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz?AuthParam=1437810421_1d235bda6e9428e1caa05d0fd7951c6d -o jdk-x64.tar.gz

(备注:建议直接在百度搜索“oracle JDK download”找到合适OS/64/32的JDK并直接通过浏览器下载到Ubuntu,再进行如下操作更放心!)

(备注:在Ubuntu的GUI中通过firefox下载JDK,默认保存路径在“/home/hadoop/下载”中,path含有中文,如果Ubuntu配置了“双拼/拼音”输入法,则可以在Terminal下使用中文!)

 

$sudo cp jdk-x64.tar.gz /usr/local/   //因hadoop权限不够,用sudo拷贝JDK到合适目录

$cd /usr/local/    //进入JDK包所在目录

$sudo tar xzvf jdk-x64.tar.gz  //sudo来释放JDK

(备注:本人下载是当时最新的JDK1.8.0_74,故在/usr/local/目录下解压生成的jdk目录是/usr/local/jdk1.8.0_74

 

$sudo apt-get install vim  //Ubuntu15.10下默认vim下载但未安装,请下载安装,确保vim可用;

$sudo vim /etc/profile    //配置如下JDK相关路径到profile

(备注:这几行配置应该加载到/etc/profile文件的“if [ -d /etc/profile.d ]; then”这一章节中,“done”行之后,“unset i行之前!另外,linux配置等号两边不能空格!)

export JAVA_HOME=/usr/local/jdk1.8.0_74

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

(备注:vim打开文本文件后,提示符默认在左上角且为命令模式,请马上输入“i”则进入“插入”模式;则可上下左右移动提示符并修改文本;

 完成后马上用esc退出插入模式;随后用“shift+冒号”进入底部命令行模式,用wq命令保存并退出,q直接退出(如果未做任何修改);如果修改

 则无法q,而必须用q!来强制直接退出(不保存);其他请详查web资料;)

 

$source /etc/profile    //使修改的profile立即生效

$java –version   //测试jdk是否安装成功;能正确显示JDK版本的就算安装成功;

 

 

4.安装hadoop

$sudo cp hadoop-2.7.2.tar.gz /usr/local/     //从hadoop官网下载最新hadoop包,比如2.7.2并拷贝到目的目录

$cd /usr/local

$sudo tar xzvf hadoop-2.7.2.tar.gz  //解压;只能下载tar.gz给Ubuntu用;rpm格式是redhat专用

$sudo mv hadoop-2.7.2 hadoop   //改名为hadoop方便后续操作

$sudo chown hadoop:hadoop -R -f /usr/local/hadoop/   //修改目录主人

$sudo vim /etc/profile   //vim可用后,再次编辑profile,添加配置;

 

export HADOOP_INSTALL=/usr/local/hadoop

export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin

export HADOOP_MAPRED_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_HOME=$HADOOP_INSTALL

export HADOOP_HDFS_HOME=$HADOOP_INSTALL

export YARN_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

 

$ /usr/local/hadoop/bin/hadoop version //查看hadoop的版本及校验和等信息!

 

(备注: 如果安装了vmware tool并启用了共享目录,则可以从宿主PC拷贝文本和文件到虚拟机中;或通过teamviewer等软件拷贝文本和晚间!)

 

特别说明:校验MD5

$cat ~/下载/hadoop-2.7.2.tar.gz.mds | grep 'MD5'  //可列出md5检验值

$head -n 6 ~/下载/hadoop-2.7.2.tar.gz.mds   //也可列出2.7.2校验值

md5sum ~/下载/hadoop-2.7.2.tar.gz | tr "a-z" "A-Z"   //可根据二进制包来计算md5值并转为大写方便比较;

若文件不完整则这两个值一般差别很大,可简单对比前几个字符和后几个字符即可。

 

补充:

Ubuntu15.10包含:md5sum,sha1sum,sha256sum等命令,通过man来查他们用法,既可以生成一个二进制文件的校验和,也可以验证校验和是否正确要求校验和关联的二进制文件放在同一个目录)。

比如校验hadoop文件可用命令: sha256sum  --check  hadoop-2.7.2-tar.gz.mds  (如果它是正确的SHA256格式,sha256sum会找到它内部指向的原始二进制文件,比如hadoop-2.7.2-tar.gz,并为它生成临时的SHA256来比较是否一致!)

目前看hadoop上下载的2.7.2二进制安装包是好的,但它的SHA256文件是不可视的乱码文件(非ANSI或UTF-8,也许是Unicode),所以可能以上命令及用法及猜想都是有问题的,毕竟hadoop网站不会错!

 

5.测试

进入 hadoop目录:

$cd /usr/local/hadoop  //进入hadoop目录

$mkdir ./input    //example WordCount不会自动建立input目录,所以需要手动建立;

$cp *.txt ./input/    //拷贝若干文本文件到input让WordCount程序可以统计词频;

$rm -f -r /usr/local/hadoop/output/

     //WordCount程序不会自动删除output,每次启动如果没有手动删除output就出错!

$./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output   //wordcountl例子,统计input目录下所有文件可读词汇的词频并写入output中

$cat ./output/*          //查看运行结果

 

$./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep ./input ./output 'dfs[a-z.]+' // grep 例子,将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中

$cat ./output/*          //查看运行结果

 

$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar //查看更多Hadoop 附带的例子说明,包括 wordcount、terasort、join、grep 等。

 

 

(备注:运行官方测试样例如上;遇到问题请添加input目录,删除output目录;结果在output\part-r-00000中;)

(备注:特别注意,如果通过VMware的共享目录,放了一些window的文本文件到hadoop的input目录,因为“文件结果linux和win不同”则hadoop会报错,但初看仍然会继续执行得到结果!)

 

#####至此,单点hadop的安装和demo测试完成!(不含hdfs/yarn伪分布式安装内容) #####

 

2.   Hadoop伪分布式

伪分布式模式是基于单机模式顺利安装测试通过后的进阶尝试;

其使用的软件版本和环境都和单机模式没有区别,仅是通过新增配置来使伪分布模式起效并取代单机模式的运行;

后面有关于模式之间切换的介绍;

2.1   安装步骤

0.环境和版本

(完全和单机模式一致)

ubuntu 15.10

jdk 1.8.84

hadoop 2.7.2

1.    配置core-site.xml文件

(说明:Hadoop 可以在单节点上以伪分布式的方式运行;Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件,而不再是Ubuntu操作系统的ext4下面的文件;)

 

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml。配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。修改配置文件 core-site.xml原来内容为空的标签“<configuration></configuration>”

(备注:因为是XML文件,不是普通INI/CONF/TXT等配置文件,所以不可以用#井号做备注,应该用<!—XXX -->来添加注释!)

修改为下面配置:

<configuration>

        <property>

             <name>hadoop.tmp.dir</name>

             <value>file:/usr/local/hadoop/tmp</value>

             <description>Abase for other temporary directories.</description>

        </property>

        <property>

             <name>fs.defaultFS</name>

             <value>hdfs://localhost:9000</value>

        </property>

</configuration>

 

 

2.    配置hdfs-site.xml文件

同样修改配置文件 hdfs-site.xml:

<configuration>

        <property>

             <name>dfs.replication</name>

             <value>1</value>

        </property>

        <property>

             <name>dfs.namenode.name.dir</name>

             <value>file:/usr/local/hadoop/tmp/dfs/name</value>

        </property>

        <property>

             <name>dfs.datanode.data.dir</name>

             <value>file:/usr/local/hadoop/tmp/dfs/data</value>

        </property>

</configuration>

XML

 

 

(说明:虽然官方教程只需配置 fs.defaultFS 和 dfs.replication两项就可以运行hadoop,但若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。)

 

3.    格式化namenode

./bin/hdfs  namenode –format    //配置完成后,需格式化 NameNode方能使用;

(备注:成功的话,会看到 “successfully formatted” 和 “Exitting with status 0″ 的提示;若为 “Exitting with status 1″ 则是出错。)

 

 

(注意:这一步若提示 Error: JAVA_HOME is not set and could not be found. 的错误,则需要在文件 ./etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 变量;比如找到“export JAVA_HOME=${JAVA_HOME}”,改为“export JAVA_HOME=/usr/local/jdk1.8.0_74,并重新尝试格式化即可。最好总是添加!

 

4.    启动HADOOP

./sbin/start-dfs.sh    //开启 NameNode 和 DataNode 守护进程

(备注:出现SSH提示,输入yes即可)

 

 

 

注意:启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,并不会影响正常使用。但最好修复它;

解决方法是编辑hadoop-env.sh, 在最后添加“export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_INSTALL/lib/native”

 

 

5.    JPS命令验证HADOOP进程

启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”;JPS命令以后会多次用于yarn和真实分布式模式中;

 

Jps  //通过jps查看启动的Hadoop进程

 

 

错误1:如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试

错误2:如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,通过查看启动日志排查原因。

错误3:如果DataNode没启动,一般情况下,可尝试如下方法恢复。但这会删除 HDFS中原有数据,请谨慎!):

./sbin/stop-dfs.sh   //关闭hadoop(hdfs)

rm -r ./tmp  //删除 tmp 文件,这会删除 HDFS 中原有的所有数据

./bin/hdfs namenode -format  //重新格式化 NameNode

./sbin/start-dfs.sh  //重启

 

排错方法:可查启动日志来排查原因,注意几点:

启动时会提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以应该查看这个后缀为 .log 的文件;启动日志都是追加的,拉到最后查看最新内容,log每行有时间信息。出错通常写着 Fatal、Error、Warning 或者 Java Exception 的地方。可在网上搜索出错信息,找到相关解决方法。

 

6.    WEB界面查HDFS信息

http://localhost:50070/;当成功启动后,可以访问 Web 界面来查看 NameNode 和 Datanode 信息,还可在线查看 HDFS 中的文件。在“Utilities”菜单下“Browse the file system”中可看到在hdfs上建立的目录“/user/hadoop”等,而在ubuntu的文件系统ext4上看不到!

 

 

7.    通过命令操作HDFS文件系统

单机模式下运行“grep/WordCount”等例子读取的是Ubuntu的ext4中的本地数据,而伪分布式读取的则是 HDFS 上的数据。为了使用 HDFS,需要在 HDFS 中创建用户目录,增删改查文件和目录。

./bin/hdfs dfs -mkdir -p /user/hadoop  //在HDFS创建hadoop用户

./bin/hdfs dfs -mkdir input      //新建hadoop用户后自动转到其目录下,现在新建input目录,在hadoop目录下

./bin/hdfs dfs -put ./etc/hadoop/*.xml input   //将Ubuntu的ext4目录下的xml文件拷贝到hdsf的hadoop\input目录下;

./bin/hdfs dfs -ls input     //复制完成后,查看文件列表;

 

(说明:伪分布式模式运行的MapReduce 作业的方式跟单机模式相同,但区别在于伪分布式读取的是HDFS中的文件,而不是Ubuntu的ext4下的output和input目录;可以将单机模式步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。

 

8.    测试

执行“grep”example:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

$ ./bin/hdfs dfs -cat  output/*      //查看hdfs上的结果;

执行“wordcount”example:

./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output

(备注:此句和单点运行模式时一模一样,但是因为hadoop启动为伪分布式,所以从hdfs里的input读数据并写入output中去,不会再访问ubuntu的文件系统ext4了。结果可以通过本机50070的portal登陆查看hdfs文件系统的变化,并下载结果到ext4中。)

 

查看运行结果(查看的是位于 HDFS 中的输出结果):

./bin/hdfs dfs -cat output/*

 

 

也可从HDFS取回运行结果到本地ext:

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)

./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机

cat ./output/*

 

(再次运行)Hadoop伪分布式的grep

./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

(备注:Hadoop 运行grep或wordcount时,输出目录不可存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,需先删除 output 文件夹;在实际开发应用程序时,也可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作,如下:)

Configuration conf = new Configuration();

Job job = new Job(conf);

 /* 删除输出目录 */

Path outputPath = new Path(args[1]);

outputPath.getFileSystem(conf).delete(outputPath, true);

 

 

关闭 Hadoop:

./sbin/stop-dfs.sh

 

再次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!

 

3.   Hadoop伪分布式(+YARN)

3.1   安装步骤

 

启动YARN

启动 Hadoop 后,没有原来的JobTracker 和 TaskTracker,因为新版Hadoop使用了新的MapReduce V2框架,称为 YARN(Yet Another Resource Negotiator)。YARN 从 MapReduce 中分离出来,负责资源管理与任务调度。

YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。伪分布式HADOOP可以不安装和启动YARN。

通过 ./sbin/start-dfs.sh启动Hadoop后,仅是启动了供MapReduce使用的HDFS环境,为了启动 YARN来负责资源管理与任务调度。需要修改配置文件 mapred-site.xml:

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml //先从默认template重命名

用vim编辑如下:

<configuration>

        <property>

             <name>mapreduce.framework.name</name>

             <value>yarn</value>

        </property>

</configuration>

再修改配置文件 yarn-site.xml:

<configuration>

        <property>

             <name>yarn.nodemanager.aux-services</name>

             <value>mapreduce_shuffle</value>

            </property>

</configuration>

./sbin/start-yarn.sh      /YARN(需先启动HDFS/MR)

./sbin/mr-jobhistory-daemon.sh start historyserver  //启动历史服务器,才能在Web中查看任务运行情况;

通过 jps命令查看到(NodeManager,ResourceManager,NameNode,DataNode)进程都启动了;

启动 YARN 之后,运行实例的方法还是一样,但资源管理方式和任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN的好处是通过Web界面http://localhost:8088/cluster可以查看任务运行情况:

 

YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。

如果不想启动 YARN,务必把配置文件 mapred-site.xml重命名,比如改回到mapred-site.xml.template,需要用时再改回来。否则该配置文件存在但未开启 YARN的情况下,运行实例程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032″ 的错误,这就是为何该配置文件初始默认文件名为 mapred-site.xml.template的原因。

(备注:先关闭yarn再rename它的配置比较好!Ubuntu用mv而不是rename来修改文件名称! Ubuntu下面rename是另一个较为复杂但强大的正则表达式命令,一般用来批量重命名文件之用)

./sbin/stop-yarn.sh    //关闭YARN

./sbin/mr-jobhistory-daemon.sh stop historyserver    //关闭history服务器,WEB也没了;

 

补充hdfs命令:

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ hadoop fs -ls -R /        列出虚拟hdfs的根目录/下所有文件 –R是递归

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir /user/hadoop/output 新建hdfs指定目录(绝对路径)

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r /user/hadoop/output 递归删除指定目录

 

 

4.   Hadoop集群

4.1   安装步骤

 

前面已经描述了Hadoop的单点安装,伪分布式安装及YARN的使用,这里再描述集群安装的要点。

我们基于之前安装的目录假设,仅对有区别的做特别提醒,否则请翻看前面内容。

另外,一些注意点和要点,可能也类似,前面提醒过的,无非重要,不再提醒,假设读者已经充分熟练掌握前面几种安装情况,并顺利运行。

 

笔者的网络拓扑环境如下:

台式PC(宿主机/AMDK8/8G/win10):192.168.1.X(路由器DHCP动态分配)

台式PC(虚拟机/AMDK8/3G/Ubuntu15.10+虚拟机网络模式为桥接模式):192.168.1.220(master)固定IP

笔记本PC(E5420/i3/2GB/Ubuntu15.10):192.168.1.201(slave1)固定IP

笔记本PC(E5400/双核/2GB/Ubuntu15.10):192.168.1.202(slave2)固定IP

两两都能ping通,可以路由得到彼此,算在一个局域网内。

两两建立SSH后,可以用SCP(如下),将下载好的JDK/HADOOP等拷贝到其他host主机上。(用有线网络所在的HOST下载安装包最快。)

scp hadoop-2.7.2.tar gz hadoop@192.168.1.6:/home/hadoop/  或

scp hadoop-2.7.2.tar gz hadoop@slave1:/home/hadoop/  其他类似

 

主要流程:

  1. 确认Master/Slave/…等集群各主机(host)的功能,弄好它们之间的SSH(配置见后),IP,PING,SCP,JDK;

a)         Hostname建议用常用且含有明确的master和slave。

  1. 在 Master 节点配好hadoop 用户,安装Hadoop并配置;

a)         如果安装过单点或伪分布式就已经正确安装了hadoop,只有配置有些变化而已。

3.      在Slave节点配号 hadoop 用户;

4.      将 Master节点上的/usr/local/hadoop目录复制到其他Slave节点上(为了快并保持配置一致,这样比较简单);

5.      在 Master节点上开启Hadoop,就启动了整个Hadoop集群。

 

准备IP和网络

(A)有些家庭电信宽带自带路由器,但它只提供useradmin权限(也许电话服务商可以获取admin权限),这个账号仅能修改很少配置。却不能绑定MAC地址,设定DHCP的IP超时时间等;所以家中多个设备如手机,PC,笔记本电脑,如希望保持家庭内网IP不变,只能在设备上设定固定IP;比如在PC或笔记本电脑中设定内网IP,不影响上公网Internet。

(B)如果PC上还有虚拟机(比如笔者WIN10台式PC上安装Ubuntu15.10的虚拟机),但用个免费的VMware player,则此免费版本不支持修改“虚拟网络参数”(比如修改VMNET8的默认192.168.44.XXX虚拟机网段为192.168.1.XXX等等),但收费的VMware workstations版可以。所以因为192.168.1.X和192.168.44.X是2个网段,无法ping通(也许可以通过增加路由等方式解决,备注如下。),不方便。所以将VMware player中虚拟机改为桥接模式,虚拟机和宿主机共享一个网段,所以虚拟机可以配置固定IP192.168.1.220;就可以和家中其他host通讯了;

备注: 1.X或44.X两个网段中任何一侧主机都添加手动路由(类似:route add 192.168.44.0 mask 255.255.0.0 192.168.1.199;假设虚拟机宿主PC是固定IP且在1.X网段;因为宿主机安装了VMware player,所以自动具有向两侧网络转发IP包的能力;详见http://www.zhihu.com/question/20231472 此法待验证!),建议用桥接方法,简单方便。

 

任何配置前,建议都先关闭 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再进行后续集群配置。

 

sudo vim /etc/hostname     //修改“hostname=master”,其他slave等集群机器都要修改;注意大小写;

sudo vim /etc/hosts         //修改为如下,其他slave等集群机器都要修改;注意大小写;

“192.168.1.201 slave1”

“192.168.1.202 slave2”

“192.168.1.220 master”

“127.0.0.1 localhost”

 

对master和每个slave机器都做如上hostname和hosts配置,且重启动(才能体现出hostname)

注意:hosts文件中只有一个 127.0.0.1,对应名为 localhost,有多余应删除,特别不能有 “127.0.0.1 master”等

 

SSH配置

这个和单点类似,只不过要让master可以操控各个slave机器,所以额外做如下操作:

cd ~/.ssh              //如果以前安装hadoop生成过ssh,就会有该目录;

rm ./id_rsa*            //删除OLD公匙(因为hostname变化了)

ssh-keygen -t rsa        //一直按回车就可以(这样就生成了无密码的密钥对)

cat ./id_rsa.pub >> ./authorized_keys    //将公钥id_rsa.pub写入认证文件authorized_keys中

ssh master            //尝试master本机的无密码SSH登陆,测试通过就继续后续处理

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/   //将公钥也拷贝到slave1机器上;

 

#以下在slave1机器上执行,其他slave类似

mkdir ~/.ssh        //如果不存在该文件夹需先创建,若已存在则忽略。Slave1如果自己弄过SSH,就会有它。

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys    //将master的公钥加入本地授权文件;

rm ~/id_rsa.pub    //删除master公钥

 

#以下在slave1机器上执行,其他slave类似

ssh slave1     //在master机器上执行,尝试无密码SSH登陆slave1,成功后,其他slave都配置好测试完。

 

路径配置

在路径(etc/profile)中增加行“export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin”,如果做过之前的点单等配置,应该已经有了,可以查所有集群的相关配置。并source一下,应用更新。

 

设定集群相关配置文件:

集群/分布式模式需要修改/usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置请查官方说明。这里仅设置为了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

 

1.文件slaves

该文件记录所有DataNode 的主机名,每行一个hostname字符串,默认为 localhost(伪分布式模式时,slaves文件默认为localhost,则节点即作为NameNode也作为DataNode)。分布式配置可以保留 localhost,也可删掉,让master 节点仅作为 NameNode 使用。

这里请添加如下内容:

“slave1

slave2”

两行,master 节点仅作为NameNode使用,不作为datanode。请将localhost行删除。

 

2文件core-site.xml

 

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://Master:9000</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>file:/usr/local/hadoop/tmp</value>

                <description>Abase for other temporary directories.</description>

        </property>

</configuration>

 

3文件hdfs-site.xml

我们有slave1和slave2所有dfs.replication填写2,它指定dfs分布式文件系统的replication数目。

<configuration>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <value>Master:50090</value>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>2/value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>file:/usr/local/hadoop/tmp/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>file:/usr/local/hadoop/tmp/dfs/data</value>

        </property>

</configuration>

 

4文件mapred-site.xml

默认安装完是mapred-site.xml.template,请重命名。

 

<configuration>

        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>master:10020</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>master:19888</value>

        </property>

</configuration>

备注:注意master大小写最好一致,几个配置文件都要注意。

 

5文件yarn-site.xml

 

<configuration>

        <property>

                <name>yarn.resourcemanager.hostname</name>

                <value>master</value>

        </property>

        <property>

                <name>yarn.nodemanager.aux-services</name>

                <value>mapreduce_shuffle</value>

        </property>

</configuration>

 

master复制配置到各slave机器

将 master上/usr/local/Hadoop文件夹复制到各个节点上。如果以前有安装配置运行过伪分布式模式,建议在切换到集群模式前备份(或删除)之前的临时文件,以便出现问题。

master 节点上执行

cd /usr/local

sudo rm -r ./hadoop/tmp     //删除无用临时文件

sudo rm -r ./hadoop/logs/*   //删除日志

tar -zcf ~/hadoop.master.tar.gz ./hadoop   //压缩

cd ~

scp ./hadoop.master.tar.gz slave1:/home/hadoop  //从master复制目录压缩包到slave1机器;

slave1 节点上执行

sudo rm -r /usr/local/hadoop    //删掉旧的(或mv备份到比如“Hadoop-standalone”等等)

sudo tar -vzxf ~/hadoop.master.tar.gz -C /usr/local  //解压缩

sudo chown -R hadoop:hadoop /usr/local/hadoop    //变更目录owner权限,让hadoop用户可用此目录

 

同样对其他slave进行处理。

 

首次运行:

 

首次启动需要先在master节点执行NameNode的格式化:

在master节点上运行:

hdfs namenode -format       //首次运行需要执行初始化(一大堆log输出,开启NameNode,格式化并再次关闭)

 

关闭防火墙:

Ubuntu15.10如果是desktop默认配置的防火墙不会影响hadoop各种模式的运行。但如果是server版本,比如centOS这种偏服务器的版本,可能默认/etc/init.d/iptables会启动,可以停掉它,请查相关资料。

 

 

 

启动Hadoop集群:

在 Master 节点上执行:

start-dfs.sh  //一般在/usr/local/hadoop/sbin,下同;

start-yarn.sh

mr-jobhistory-daemon.sh start historyserver

通过命令jps可以查看各个节点所启动的进程。正确的话,在Master节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程。在Slave节点可以看到 DataNode 和 NodeManager 进程。缺少任一进程都表示出错。

还可在Master节点上通过“hdfs dfsadmin –report”查看DataNode是否正常启动,Live datanodes为2(2个slave机器都是datanode),则说明集群启动成功。

 

通过Web查看集群状态:

http://master:50070/ 查看DataNode,NameNode 的状态。如果不成功,通过启动日志排错。Log4j应该配置好(前面有详述,不在累赘)。

 

运行分布式集群的例子:

方法和伪分布式一样(伪分布式就是为了让你联系分布式的,所以理应差别不大)。

hdfs dfs -mkdir -p /user/hadoop           //首先创建HDFS上的用户目录

hdfs dfs -mkdir input              //为hdfs分布式系统建立input目录

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input    //从Ubuntu本地ext4文件系统拷贝文件到hdfs

http://localhost:50070/      //web查看DataNode的状态(占用大小会改变),文件确实复制到了DataNode中

 

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'    //运行MapReduce作业

说明:上述命令hadoop位于/usr/local/hadoop/bin/hadoop,因为设定过PATH,所以可以直接执行;运行时的输出信息与伪分布式类似,会显示Job 的进度。可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。

 

查看job运行情况:

通过Web界面查看JOB进度http://master:8088/cluster ,点击 “Tracking UI”这列的 History 连接,可看任务运行信息。

 

关闭集群:

stop-yarn.sh    //在master节点上关闭yarn

stop-dfs.sh     //再master节点上关闭hdfs分布式文件系统

mr-jobhistory-daemon.sh stop historyserver          //在master上关闭跟踪信息

备注:你同样也可以和伪分布式类似而选择不启动YARN,但除了不start-yarn.sh之外,要记得改掉mapred-site.xml 的文件名,比如将它mv为原来的mapred-site.xml.template。

 

至此,基本上分布式hadoop集群最基本的搭建运行和启停都算弄了一下。还有大量的配置和调优工作需要研究。

提醒:千万不要为了调优和调优,分布式计算系统(包括以后将介绍的SPARK)主要是为了解决问题,先跑通解决问题是一个领域或维度;而调优并让问题解决的更漂亮是另外一个维度和领域,两者并无必然的联系;建议还是先用上分布式(hadoopspark),再考虑一定数据量和计算量情况下的调优。这是两个工种,如同研发工程师和产业化工程师的区别

 

 

Hadoop各种模式切换及说明:

 

1伪分布式安装的说明:

请参考相关文档,配置起效hdfs,则input和output目录都放到hdfs中,实现正在的基于hdfs高层文件格式之上的分布式;但因为实在一台PC或虚拟机的Ubuntu上操作,所以叫伪分布式,任务并未分发给不同的PC节点!

2伪分布式安装的yarn说明:

伪分布式允许可单独靠hadoop;也可升级安装yarn来支持hadoop,则有更方便查看的web界面来观察yarn的分布式允许;

3分布式安装说明:

请虚拟或实际配置至少2或多个PC节点,来测试真实分布式hadoop系统;配置和允许和伪分布式差不多,只是多了ssh/SCP/HOSTNAME配置等内容,原理类似;

4单点和伪分布式切换:

  备份并确保文件(mapred-site.xml.template)不存在;备份并确保文件(core-site.xml)为初始状态,就是“configuration标签内部是空的!”;则可以按照单点模型运行mapreduce的WordCount例子,并在单点所在的ext4的Ubuntu系统内发现output文件输出(而不会输出到hdfs上);

5伪分布式是否启动YARN

  按正常命令关闭YARN;备份并确保文件(mapred-site.xml.template)不存在;则会运行不带YARN的伪分布式模式,否则即使不启动yarn,run的时候也会出错!

6伪分布式和分布式切换:

两者无本质区别,只是将namenode,datanode,hdfs,各类manager等网元配置分不到不同的PC上而已;其实“伪分布式模型”等价于启动hadoop+hdfs+yarn的最小网元集合,而网元们都指向或曰安装在同一个PC上。

1.      从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;

2.      在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。

 

 

 

5.   其他补充

6.1   LINUX经验

6.1.1      开启bash的自动完成功能

$sudo vim /etc/bash.bashrc   //修改此文件;按需输入密码

 

找到文件中的如下脚本片段,去掉本小节第一行外的所有前导#号;

这就开启了目录/文件自动补全和完成的智能功能,大大提升terminal中bash命令的运行效率。

 

#enable bash completion in interactive shells

#if ! shopt -oq posix; then

#      if [-f  /usr/share/bash-completion/bash_completion ]; then

#          . /usr/share/bash-completion/bash_completion

#      elif [ -f /etc/bash_completion]; then

#           . /etc/bash_completion

#      fi

#fi

 

6.1.2      开启ubuntu虚拟机和win10宿主机的vmware tool(共享文件)

如果不是真实PC,而是用虚拟机且是VMware,那么可以安装VMware tool,并使用共享目录,在宿主机和虚拟机上传递文件,拷贝文字等;

网络连接:http://blog.csdn.net/zybasjj/article/details/7401808 (VMware虚拟机安装Ubuntu使用share folders共享windows目录的方法)

 

步骤:

1.关闭ubuntu虚拟机后,在虚拟机配置中设定CD/DVD-ROM指向vmware安装目录下的”linux.iso”(如果是win虚拟机则指向windows.iso);

2.启动ubuntu虚拟机发现taskbar上有VMware Tools的光盘图标;双击查看;

3.发现多个文件,比如:manifest.txt和 VMwareTools-10.0.5-3228253.tar.gz等,将套们都拷贝到 /tmp 下;

4.进入cd /tmp;并解压缩tar zxvf VMwareTools-8.4.5-324285.tar.gz;

5.进入cd vmware-tools-distrib(进入解压后对应文件夹);

6.sudo ./vmware-install.pl 命令来安装VMware tool;会提示输入登陆用户的密码;然后有不断的提示,主要都按回车,最后会出现: Enjoy,   --the VMware team,就算按照完毕!

7.在宿主机(比如win10)上对vmware中的ubuntu虚拟机的配置中“共享目录”进行设定,一般不勾选只读;进入ubuntu虚拟机后会在 /mnt/hgfs/xxx 下发现win10上的文件了!(xxx就是win10宿主机上设定的共享目录)

8.注意win和linux的文件结尾不同,尤其是带回车换行的文本文件等;二进制文件可能好点;

 

6.1.3      Ubuntu的Terminal快捷方式

Ubuntu下Ctrl+Alt+T调用出Terminal界面。

6.1.4      Find命令举例

sudo find / -name 'mapred-site.xml' //在根目录查找此文件名的文件

6.1.5      PATH变量简述

 

可执行 echo $PATH(或export $PATH,看用的什么shell环境了) 查看它是包含了很多目录的字符串。例如我们在主文件夹 ~ 中执行 ls 这个命令时,实际执行的是 /bin/ls 这个程序,而不是 ~/ls 这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。

我们一般先进入/usr/local/hadoop 目录中,再执行 sbin/hadoop,实际上等同于运行 /usr/local/hadoop/sbin/hadoop。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过 start-dfs.sh 开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。

我们如果在 ~/.bashrc 中设置PATH,比如“export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin”,并用source ~/.bashrc使设置生效;之后在任意目录中,都可以直接使用 hdfs 等命令。比较方便。

 

6.1.6      Ubuntu中安装vmware tools

如果要升级或安装,可以通过$sudo apt-get install open-vm-tools 来安装和升级;

也可以从网络下载“linux.iso”的vmware tools的镜像光盘,放入虚拟机的DVD/CDROM中,启动后多出一个盘,位于“/media/username/VMware tool/”目录中,然后将“VMwareTools-10.0.0-2977863.tar.gz”文件拷贝到比如/tmp目录,解压并运行“./install.pl”就能安装了。

别忘记启动虚拟机配置中设定外界的宿主系统(比如WIN10)的一个目录(比如叫sharedfolder)为共享目录,进入虚拟机后,自动mount挂在到“/mnt/hgfs/sharedfolder”这样可以共享文件了。

 

6.2   杂

6.2.1      如何保存被禁止拷贝或存盘的HTML?

当html或mht等页面禁止保存或拷贝内容的时候,可以查看源码并保存为html后缀文件。

然后本地打开拷贝黏贴其内容。

如果是zh-cn而非通用的3字节utf-8编码,则可以用诸如notepad++等软件打开html并转换为utf8,保存再次打开,就能拷贝黏贴了。

 

 

6.   资料

本文内容是笔者从网络资料中收集,整理,实践,修订,备注而成。

一为整理学习,方便以后查阅参考;

二为方便他人学习交流之用;

以下罗列资料只有部分研究过,仅供参考,并无倾向性推荐。

 

 

感谢开放的网络。感谢网络上各位的分享!

ubuntu15.04安裝hadoop2.6.0及eclipse开发环境配置:http://www.linuxdiyf.com/linux/12474.html

Ubuntu15.04单机/伪分布式安装配置Hadoop与Hive试验机:http://www.linuxdiyf.com/linux/11858.html

Ubuntu下安装Hadoop(单机版):http://www.linuxdiyf.com/linux/11372.html

 

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html

http://www.micmiu.com/bigdata/hadoop/hadoop-2x-ubuntu-build/

http://www.powerxing.com/install-hadoop/ 笔记Hadoop

 

Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS

Hadoop-in-Practice第四章MapReduce-Join代码运行问题

Hadoop安装配置简略教程

Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0

 

大数据教材推荐

林子雨老师(研究生导师)编著的《大数据技术原理与应用》,该教程是针对高校学生打造的入门级教材,目前已被多所高校作为大数据课程指定教材。

林子雨编著《大数据技术原理与应用》官网

林子雨主讲入门级大数据在线课程(视频)

《大数据技术原理与应用》教材配套学习指南

《大数据技术原理与应用》教材配套上机练习题目