当前位置: 首页 > 文档资料 > 大数据实验手册 >

第四章 Hadoop的安装

优质
小牛编辑
119浏览
2023-12-01

一 JDK的安装

  1. 下载JDK安装包,建议去Oracle官方下载,地址自行百度
  2. 下载Hadoop2.6的安装包,建议官方下载,地址自行百度
  3. 如果是在Windows端进行终端操作,建议使用XFTP与XShell,有Free版本
  4. 之后用XFTP将JDK安装包与Hadoop安装包上传到实验主机上
  5. 将Java SDK解压,并将解压文件复制到/usr/lib/jvm中
  6. 配置环境变量
  7. 如果系统中已经有默认的OpenJavaSDK的话,这里我们需要修改默认SDK
  8. 检测JavaSDK是否成功安装
  1. #新安装的服务器,建议更新一下安装源列表,同时安装nano,用VI编辑不是太方便
  2. #sudo aptitude update
  3. #sudo aptitude upgrade
  4. #sudo aptitude install nano
  5. chu888chu888@ubuntu1:~$ tar xvfz jdk-8u65-linux-x64.gz
  6. chu888chu888@ubuntu1:~$ sudo cp -r jdk1.8.0_65/ /usr/lib/jvm/
  7. chu888chu888@ubuntu1:/usr/lib/jvm$ sudo nano /etc/profile
  8. #修改内容如下,注意大小写
  9. #在环境变量中的配置中,有一点需要指出就是如果只是编辑~/.profile的话这个变量的生效只是针对当前用户的.
  10. #如果想要其在全局生效的话,建议更新/etc/profile,这是一个全局的.
  11. export JAVA_HOME=/usr/lib/jvm/
  12. export JRE_HOME=${JAVA_HOME}/jre
  13. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  14. export PATH=${JAVA_HOME}/bin:$PATH
  15. chu888chu888@ubuntu1:/usr/lib/jvm$ source /etc/profile
  16. chu888chu888@ubuntu1:/usr/lib/jvm$ env
  17. chu888chu888@ubuntu1:/usr/lib/jvm$ java -version
  18. java version "1.8.0_65"
  19. Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
  20. Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
  21. #有一种极端情况就是,如果在本机已经安装了OpenJavaSDK,怎么办?
  22. sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/bin/java 300
  23. sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/bin/javac 300
  24. sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/bin/jar 300
  25. sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java/bin/javah 300
  26. sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java/bin/javap 300
  27. sudo update-alternatives --config java
  28. sudo update-alternatives --config javac

二 Hadoop的用户创建

  1. 创建hadoop用户组
  2. 创建hadoop用户
  3. 给hadoop用户添加权限,打开/etc/sudoers文件
  1. chu888chu888@ubuntu1:/$ sudo addgroup hadoop
  2. chu888chu888@ubuntu1:/$ sudo adduser -ingroup hadoop hadoop
  3. chu888chu888@ubuntu1:/$ sudo nano /etc/sudoers
  4. root ALL=(ALL:ALL) ALL
  5. hadoop ALL=(ALL:ALL) ALL

三 SSH无密码登录

  1. #第一次都要用ssh密码登录太麻烦,我们想办法采用无密码登录
  2. chu888chu888@ubuntu2:~$ cd ~/.ssh/
  3. chu888chu888@ubuntu2:~/.ssh$ ssh-keygen -t rsa
  4. Generating public/private rsa key pair.
  5. Enter file in which to save the key (/home/chu888chu888/.ssh/id_rsa):
  6. Enter passphrase (empty for no passphrase):
  7. Enter same passphrase again:
  8. Your identification has been saved in /home/chu888chu888/.ssh/id_rsa.
  9. Your public key has been saved in /home/chu888chu888/.ssh/id_rsa.pub.
  10. The key fingerprint is:
  11. 3a:51:9b:99:3e:65:9d:9a:b4:60:35:4f:79:d9:5b:89 chu888chu888@ubuntu2
  12. The key's randomart image is:
  13. +--[ RSA 2048]----+
  14. | |
  15. | ..o.|
  16. | . o oEo.o|
  17. | . * = o o|
  18. | . S + + . |
  19. | = = + |
  20. | o o + |
  21. | . . |
  22. | |
  23. +-----------------+
  24. chu888chu888@ubuntu2:~/.ssh$ cat ./id_rsa.pub >>./authorized_keys
  25. chu888chu888@ubuntu2:~/.ssh$ ssh localhost
  26. #但是这里面有一个小问题就是,我是用chu888chu888这个用户做的,如果您想用
  27. #hadoop用户登录的话,这个过程需要再来一次
  28. hadoop@ubuntu2:~$ ssh hadoop@localhost

四 Hadoop的基本安装

Hadoop 2 可以通过

地址1:http://mirror.bit.edu.cn/apache/hadoop/common/
地址2:http://mirrors.cnnic.cn/apache/hadoop/common/

下载,本教程选择的是 2.6.0 版本,下载时请下载 hadoop-2.x.y.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。

下载时强烈建议也下载 hadoop-2.x.y.tar.gz.mds 这个文件,该文件包含了检验值可用于检查 hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。

本文涉及的文件均通过浏览器下载,默认保存在 “下载” 目录中(若不是请自行更改 tar 命令的相应目录)。另外,如果你用的不是 2.6.0 版本,则将所有命令中出现的 2.6.0 更改为你所使用的版本。

  1. # 列出md5检验值
  2. # cat ~/下载/hadoop-2.6.0.tar.gz.mds | grep 'MD5'
  3. # 2.7.1版本格式变了,可以用这种方式输出
  4. # head -n 6 ~/下载/hadoop-2.7.1.tar.gz.mds
  5. # 计算md5值,并转化为大写,方便比较
  6. # md5sum ~/下载/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z"
  1. 将hadoop解压到/usr/local下
  2. 修改bashrc的配置,加入内容
  3. 修改hadoop-env.sh的配置
  4. 测试
  1. chu888chu888@ubuntu1:~$ sudo tar xvfz hadoop-2.6.0.tar.gz
  2. chu888chu888@ubuntu1:~$ sudo cp -r hadoop-2.6.0 /usr/local/hadoop
  3. chu888chu888@ubuntu1:~$ sudo chmod -R 775 /usr/local/hadoop/
  4. chu888chu888@ubuntu1:~$ sudo chown -R hadoop:hadoop /usr/local/hadoop
  5. chu888chu888@ubuntu1:~$ sudo nano ~/.bashrc
  6. #加入以下内容
  7. #HADOOP VARIABLES START
  8. export JAVA_HOME=/usr/lib/jvm/
  9. export HADOOP_INSTALL=/usr/local/hadoop
  10. export PATH=$PATH:$HADOOP_INSTALL/bin
  11. export PATH=$PATH:$JAVA_HOME/bin
  12. export PATH=$PATH:$HADOOP_INSTALL/sbin
  13. export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
  14. export HADOOP_COMMON_HOME=$HADOOP_INSTALL
  15. export HADOOP_HDFS_HOME=$HADOOP_INSTALL
  16. export YARN_HOME=$HADOOP_INSTALL
  17. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
  18. export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
  19. #HADOOP VARIABLES END
  20. chu888chu888@ubuntu1:~$ source ~/.bashrc
  21. chu888chu888@ubuntu1:/usr/local/hadoop$ sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
  22. chu888chu888@ubuntu1:~$ cd /usr/local/hadoop/
  23. #hadoop安装后的查看hadoop的版本
  24. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hadoop version
  25. Hadoop 2.6.0
  26. Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
  27. Compiled by jenkins on 2014-11-13T21:10Z
  28. Compiled with protoc 2.5.0
  29. From source with checksum 18e43357c8f927c0695f1e9522859d6a
  30. This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar
  31. hadoop@ubuntu2:/usr/local/hadoop$
  32. #实验一 Hadoop单机配置
  33. Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
  34. 现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
  35. 在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
  36. chu888chu888@ubuntu1:/usr/local/hadoop$ sudo mkdir input
  37. chu888chu888@ubuntu1:/usr/local/hadoop$ sudo cp README.txt input
  38. chu888chu888@ubuntu1:/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar org.apache.hadoop.examples.WordCount input output
  39. #这里面有一个小插曲,其实就是权限的事件,如果出现问题的话,就是这个程序无法在当前目录创建,简单粗暴一点chmod -R 777 /usr/local/hadoop
  40. #如果成功的话,那前目录就会有一个output目录自动生成
  41. #目录内容如下
  42. chu888chu888@ubuntu1:/usr/local/hadoop/output$ ls
  43. part-r-00000 _SUCCESS
  44. #查看输出结果
  45. hadoop@ubuntu2:/usr/local/hadoop$ ls
  46. bin etc include input lib libexec LICENSE.txt NOTICE.txt output README.txt sbin share
  47. hadoop@ubuntu2:/usr/local/hadoop$ cd output/
  48. hadoop@ubuntu2:/usr/local/hadoop/output$ ls
  49. part-r-00000 _SUCCESS
  50. hadoop@ubuntu2:/usr/local/hadoop/output$ cd ..
  51. hadoop@ubuntu2:/usr/local/hadoop$ cat ./output/*
  52. (BIS), 1
  53. (ECCN) 1
  54. (TSU) 1
  55. (see 1
  56. 5D002.C.1, 1
  57. 740.13) 1
  58. <http://www.wassenaar.org/> 1
  59. #注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

五 开始伪分布式的配置文件修改

  1. Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
  2. Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
  3. 修改配置文件 core-site.xml
  4. chu888chu888@ubuntu1:/$ sudo nano /usr/local/hadoop/etc/hadoop/core-site.xml
  5. #内容如下
  6. <configuration>
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>file:/usr/local/hadoop/tmp</value>
  10. <description>Abase for other temporary directories.</description>
  11. </property>
  12. <property>
  13. <name>fs.defaultFS</name>
  14. <value>hdfs://localhost:9000</value>
  15. </property>
  16. </configuration>
  17. chu888chu888@ubuntu1:/$ sudo nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml
  18. #内容如下
  19. <configuration>
  20. <property>
  21. <name>dfs.replication</name>
  22. <value>1</value>
  23. </property>
  24. <property>
  25. <name>dfs.namenode.name.dir</name>
  26. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  27. </property>
  28. <property>
  29. <name>dfs.datanode.data.dir</name>
  30. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  31. </property>
  32. </configuration>
  33. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hdfs namenode -format
  34. 16/01/13 21:26:01 INFO namenode.NameNode: STARTUP_MSG:
  35. /************************************************************
  36. STARTUP_MSG: Starting NameNode
  37. STARTUP_MSG: host = ubuntu2/127.0.1.1
  38. STARTUP_MSG: args = [-format]
  39. STARTUP_MSG: version = 2.6.0
  40. 16/01/13 21:26:02 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
  41. 16/01/13 21:26:02 INFO util.ExitUtil: Exiting with status 0
  42. 16/01/13 21:26:02 INFO namenode.NameNode: SHUTDOWN_MSG:
  43. /************************************************************
  44. SHUTDOWN_MSG: Shutting down NameNode at ubuntu2/127.0.1.1
  45. ************************************************************/
  46. 成功的话,会看到 “successfully formatted” 和 “Exitting with status 0″ 的提示,若为 “Exitting with status 1″ 则是出错。
  47. >>>注意
  48. 在这一步时若提示 Error: JAVA_HOME is not set and could not be found. 的错误,则需要在文件 ./etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 变量,即在该文件中找到:
  49. export JAVA_HOME=${JAVA_HOME}
  50. 将这一行改为JAVA安装位置:
  51. export JAVA_HOME=/usr/lib/jvm/
  52. 再重新尝试格式化即可。
  53. #接着开启 NaneNode 和 DataNode 守护进程。
  54. hadoop@ubuntu2:/usr/local/hadoop$ ./sbin/start-dfs.sh
  55. 16/01/13 21:29:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  56. Starting namenodes on [localhost]
  57. localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-ubuntu2.out
  58. localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu2.out
  59. Starting secondary namenodes [0.0.0.0]
  60. The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
  61. ECDSA key fingerprint is 87:f6:48:6b:0f:52:1f:27:3f:62:8c:c0:39:2d:87:e3.
  62. Are you sure you want to continue connecting (yes/no)? yes
  63. 0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
  64. 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-ubuntu2.out
  65. 16/01/13 21:29:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  66. 启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,并不会影响正常使用。
  67. 启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
  68. hadoop@ubuntu2:/usr/local/hadoop$ jps
  69. 11841 NameNode
  70. 12309 Jps
  71. 12188 SecondaryNameNode
  72. 11998 DataNode
  73. hadoop@ubuntu2:/usr/local/hadoop$
  74. 通过查看启动日志分析启动失败原因
  75. 有时 Hadoop 无法正确启动,如 NameNode 进程没有顺利启动,这时可以查看启动日志来排查原因,注意几点:
  76. 启动时会提示形如 “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 的文件;
  77. 每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,看下记录的时间就知道了。
  78. 一般出错的提示在最后面,通常是写着 Fatal、Error 或者 Java Exception 的地方。
  79. 可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。
  80. 成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

第四章 Hadoop的安装 - 图1
第四章 Hadoop的安装 - 图2

运行伪分布式实例

1 上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:

  1. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir -p /user/hadoop
  2. 16/01/13 21:37:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. hadoop@ubuntu2:/usr/local/hadoop$

2 接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:

  1. #./bin/hdfs dfs -mkdir input
  2. #./bin/hdfs dfs -put ./etc/hadoop/*.xml input

3 复制完成后,可以通过如下命令查看文件列表:

  1. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hdfs dfs -ls input
  2. 16/01/13 21:41:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. Found 8 items
  4. -rw-r--r-- 1 hadoop supergroup 4436 2016-01-13 21:40 input/capacity-scheduler.xml
  5. -rw-r--r-- 1 hadoop supergroup 1071 2016-01-13 21:40 input/core-site.xml
  6. -rw-r--r-- 1 hadoop supergroup 9683 2016-01-13 21:40 input/hadoop-policy.xml
  7. -rw-r--r-- 1 hadoop supergroup 1133 2016-01-13 21:40 input/hdfs-site.xml
  8. -rw-r--r-- 1 hadoop supergroup 620 2016-01-13 21:40 input/httpfs-site.xml
  9. -rw-r--r-- 1 hadoop supergroup 3523 2016-01-13 21:40 input/kms-acls.xml
  10. -rw-r--r-- 1 hadoop supergroup 5511 2016-01-13 21:40 input/kms-site.xml
  11. -rw-r--r-- 1 hadoop supergroup 690 2016-01-13 21:40 input/yarn-site.xml
  12. hadoop@ubuntu2:/usr/local/hadoop$

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

  1. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
  2. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hdfs dfs -cat output/*
  3. hadoop@ubuntu2:/usr/local/hadoop$ ./bin/hdfs dfs -cat output/*
  4. 16/01/13 21:42:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  5. 1 dfsadmin
  6. 1 dfs.replication
  7. 1 dfs.namenode.name.dir
  8. 1 dfs.datanode.data.dir

5 将结果取回本地

  1. # rm -r ./output
  2. # 先删除本地的 output 文件夹(如果存在)
  3. # ./bin/hdfs dfs -get output ./output
  4. # 将 HDFS 上的 output 文件夹拷贝到本机
  5. # cat ./output/*

6 关闭hadoop

  1. #./sbin/stop-dfs.sh

7 开启hadoop

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

六 启动YARN

1 (伪分布式不启动 YARN 也可以,一般不会影响程序执行)

有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。

YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。

上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。

首先修改配置文件 mapred-site.xml,这边需要先进行重命名:

  1. hadoop@ubuntu2:/usr/local/hadoop$ mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
  2. hadoop@ubuntu2:/usr/local/hadoop$ nano ./etc/hadoop/mapred-site.xml
  3. hadoop@ubuntu2:/usr/local/hadoop$
  4. <configuration>
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. </configuration>

2 修改接着修改配置文件 yarn-site.xml:

  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. </configuration>

3 启动YARN

  1. hadoop@ubuntu2:/usr/local/hadoop$ ./sbin/start-yarn.sh
  2. starting yarn daemons
  3. starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-resourcemanager-ubuntu2.out
  4. localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-ubuntu2.out
  5. hadoop@ubuntu2:/usr/local/hadoop$ ./sbin/mr-jobhistory-daemon.sh start historyserver
  6. starting historyserver, logging to /usr/local/hadoop/logs/mapred-hadoop-historyserver-ubuntu2.out
  7. hadoop@ubuntu2:/usr/local/hadoop$

4 查看进程
开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程,如下图所示。
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster,如下图所示。

  1. hadoop@ubuntu2:/usr/local/hadoop$ jps
  2. 12880 ResourceManager
  3. 11841 NameNode
  4. 13329 JobHistoryServer
  5. 13398 Jps
  6. 13016 NodeManager
  7. 12188 SecondaryNameNode
  8. 11998 DataNode
  9. hadoop@ubuntu2:/usr/local/hadoop$

第四章 Hadoop的安装 - 图3
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。

不启动 YARN 需重命名 mapred-site.xml
如果不想启动 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。

5 关闭YARN

  1. #./sbin/stop-yarn.sh
  2. #./sbin/mr-jobhistory-daemon.sh stop historyserver

Unable to load native-hadoop library for your platform错误

错误现象

  1. hadoop@Master:~$ hadoop fs -ls input
  2. 16/01/27 18:52:02 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. Found 9 items
  4. -rw-r--r-- 1 hadoop supergroup 4436 2016-01-25 22:10 input/capacity-scheduler.xml
  5. -rw-r--r-- 1 hadoop supergroup 1072 2016-01-25 22:10 input/core-site.xml
  6. -rw-r--r-- 1 hadoop supergroup 9683 2016-01-25 22:10 input/hadoop-policy.xml
  7. -rw-r--r-- 1 hadoop supergroup 1257 2016-01-25 22:10 input/hdfs-site.xml
  8. -rw-r--r-- 1 hadoop supergroup 620 2016-01-25 22:10 input/httpfs-site.xml
  9. -rw-r--r-- 1 hadoop supergroup 3523 2016-01-25 22:10 input/kms-acls.xml
  10. -rw-r--r-- 1 hadoop supergroup 5511 2016-01-25 22:10 input/kms-site.xml
  11. -rw-r--r-- 1 hadoop supergroup 1103 2016-01-25 22:10 input/mapred-site.xml
  12. -rw-r--r-- 1 hadoop supergroup 924 2016-01-25 22:10 input/yarn-site.xml

解决

  1. 1首先编辑core-site.xml
  2. <property>
  3. <name>hadoop.native.lib</name>
  4. <value>true</value>
  5. <description>Should native hadoop libraries,if present,be used</description>
  6. </property>
  7. 2之后修改环境变量
  8. export JAVA_LIBRARY_PATH=/usr/local/hadoop/lib/native