一、准备工作

  1. 安装Linux
  2. 添加hadoop用户,配置权限
  3. 配置ssh无密码登录
  4. 安装JDK环境

二、安装Hadoop 2.6.0

2.1 下载安装包

使用镜像 http://mirror.bit.edu.cn/apache/hadoop/common/,将安装包下载到$HOME目录下

$ wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

2.2 安装hadoop

  • 将Hadoop安装至/usr/local目录下。
$ sudo tar -zxf ~/hadoop-2.6.0.tar.gz -C /usr/local/
$ cd /usr/local/
$ sudo mv ./hadoop-2.6.0/ ./hadoop
$ sudo chown -R hadoop:hadoop ./hadoop/
  • 测试hadoop是否可用
$ /usr/local/hadoop/bin/hadop -version

三、单机配置模式

默认模式是单机模式,这方便进行调试,Hadoop附带丰富的例子,含有wordcount、terasort、join、grep等,可通过下面命令查看所有例子。

$ cd /usr/local/hadoop
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount ./input ./output 
$ cat ./output/part-r-00000
$ rm -rf output
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep ./input ./output 'dfs[a-z.]+'
...
    File Input Format Counters 
        Bytes Read=123
    File Output Format Counters 
        Bytes Written=23

  1. Hadoop 默认不会覆盖结果文件,再次运行上面实例会提示出错,需要先将 ./output 删除rm -rf output
  2. CentOS设置到这一步遇到问题(尚未解决)。

[hadoop@pseudo hadoop]$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar  grep ./input ./output 'dfs[a-z.]+'
16/08/25 23:42:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/08/25 23:42:33 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
16/08/25 23:42:33 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
16/08/25 23:42:34 INFO mapreduce.JobSubmitter: Cleaning up the staging area file:/tmp/hadoop-hadoop/mapred/staging/hadoop1617089305/.staging/job_local1617089305_0001
java.lang.InternalError
    at sun.security.ec.SunEC.initialize(Native Method)
    at sun.security.ec.SunEC.access$000(SunEC.java:49)
    at sun.security.ec.SunEC$1.run(SunEC.java:61)
    at sun.security.ec.SunEC$1.run(SunEC.java:58)

四、伪分布式模式

Hadoop可在单节点上以伪分布式的方式运行,Hadoop 进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是 HDFS 中的文件。

  • 修改core-site.xml,$ vim ./etc/hadoop/core-site.xml
<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>
  • 修改hdfs-site.xml,$ vim ./etc/hadoop/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>
  • 完成配置后,执行NameNode格式化$ ./bin/hdfs namenode -format,最后执行结果为下面内容,表示成功。
......
16/08/30 00:43:33 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.
16/08/30 00:43:33 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
16/08/30 00:43:33 INFO util.ExitUtil: Exiting with status 0
16/08/30 00:43:33 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
  • 配置环境变量,$ vim ~/.bashrc,生效source ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  • 开启 NameNode 和 DataNode 守护进程。$ ./sbin/start-dfs.sh,若出现下面中的ssh提示,输入yes。
ECDSA key fingerprint is ba:27:c2:ee:a4:b2:97:47:e5:c7:cd:4a:31:8d:ae:2c.
Are you sure you want to continue connecting (yes/no)? yes

遇到问题:1、可能遇到ssh提示,输入y不能正确执行。2、在ssh无密码登录的设置有问题。3、最后不知道何故解决了问题。

  • $ jps命令判断是否成功启动。出现进程NameNode、DataNode和SecondaryNameNode表示启动成功。
hadoop@ubuntu:/usr/local/hadoop$ jps
18784 Jps
18684 SecondaryNameNode
18359 NameNode
18506 DataNode

-关闭NameNode和DataNode守护进程。

$ ./sbin/stop-dfs.sh
  • 通过Web界面(http://localhost:50070)查看NameNode和DataNode信息,还可访问HDFS文件系统。在其他机器上使用http://192.168.1.*:50070不能访问的话,可能是防火墙设置的问题。
$ sudo ufw allow 50070     #ubuntu中,允许外部访问50070(TCP/UDP)端口

hadoop2学习 hadoop 2.6_hadoop2学习

五、运行Hadoop伪分布式实例

  • 配置Hadoop环境变量,添加下面文本,$ vim ~/.bashrc,生效$ source ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
  • 设置完环境变量,可以直接使用$ hadoop命令,一般首先需要在 HDFS 中创建用户目录。
hadoop fs -mkdir -p /user/hadoop
  • 其他命令
hadoop fs -mkdir input                      # 在当前用户目录下创建input目录
hadoop fs -put ./etc/hadoop/*.xml input     #将本地目录中文件导入HDFS中
hadoop fs -ls input
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
hadoop fs -cat output/*
rm -r ./output                              # 先删除本地的 output 文件夹(如果存在)
hadoop fs -get output ./output              # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
hadoop fs -rm -r output                     # 删除 output 文件夹

六、YARN(Yet Another Resource Negotiator)

  YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,在伪分布式下,可以不启动YARN。
  启动YARN,会启动另外两个Java进程JobTracker、TaskTracker./sbin/start-dfs.sh启动 Hadoop,仅仅启动了MapReduce环境,可以启动YARN,让YARN来负责资源管理与任务调度。

  • 配置 mapred-site.xml
$ cp mapred-site.xml.template mapred-site.xml
$ vi mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  • 配置yarn-site.xml,$ vi yarn-site.xml
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • 启动YARN
$ start-yarn.sh                                # 启动YARN
$ mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况
$ jps
21163 ResourceManager
21301 NodeManager
18684 SecondaryNameNode
21634 JobHistoryServer
21665 Jps
18359 NameNode
18506 DataNode

启动YARN之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用YARN时,是“mapred.LocalJobRunner”在跑任务,启用YARN之后,是“mapred.YARNRunner”在跑任务。

  使用YARN,可以通过Web查看界面查看任务的运行情况。http://192.168.1.103:8088/cluster

hadoop2学习 hadoop 2.6_xml_02

[参考] http://dblab.xmu.edu.cn/blog/install-hadoop/