hadoop2.6单机运行及伪分布式部署运行

Hadoop单机模式运行

Hadoop 默认配置是以非分布式模式运行,即单 Java 进程,方便进行调试。可以执行附带的例子 WordCount 来感受下 Hadoop 的运行。将 input 文件夹中的文件作为输入,统计当中符合正则表达式 wo[a-z.]+ 的单词出现的次数,并输出结果到 output 文件夹中。

$ cd /usr/local/hadoop
$ mkdir input
$ cp ./etc/hadoop/*.xml input 
$ ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'wo[a-z.]+'
$ cat ./output/*    

执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词dfsadmin出现了1次

hadoop@ubuntu:~/opt/hadoop-2.6.0$ cat ./output/*
2 word
1 work

如果需要再次运行,需要删除output文件夹(因为Hadoop 默认不会覆盖结果文件):

$ rm -rf output


Hadoop伪分布式配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode。

Hadoop 的配置文件位于 /home/hadoop/opt/hadoop-2.6.0/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。

修改配置文件 core-site.xml 

<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/opt/hadoop-2.6.0/tmp</value>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

接着修改配置文件 hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/opt/hadoop-2.6.0/tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/opt/hadoop-2.6.0/tmp/dfs/data</value>
  </property>
</configuration>

配置完成后,执行 namenode 的格式化:

hadoop@ubuntu:~/opt/hadoop-2.6.0$ bin/hdfs namenode -format

最后几行如下:

15/05/13 08:50:15 INFO namenode.FSImage: Allocated new BlockPoolId: BP-707136192-127.0.1.1-1431532215593
15/05/13 08:50:15 INFO common.Storage: Storage directory /home/hadoop/opt/hadoop-2.6.0/tmp/dfs/name has been successfully formatted.
15/05/13 08:50:16 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
15/05/13 08:50:16 INFO util.ExitUtil: Exiting with status 0
15/05/13 08:50:16 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

接着开启 NaneNode 和 DataNode 守护进程。(只开启hdfs)

hadoop@ubuntu:~/opt/hadoop-2.6.0$ sbin/start-dfs.sh

出现下面的错误提示:

Starting namenodes on [localhost]
localhost: Error: JAVA_HOME is not set and could not be found.
localhost: Error: JAVA_HOME is not set and could not be found.

Starting secondary namenodes [0.0.0.0]

解决办法:

打开hadoop-env.sh中设置JAVA_HOME,修改

export   JAVA_HOME=/home/hadoop/opt/jdk1.8.0_45

问题解决~~~

Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/opt/hadoop-2.6.0/logs/hadoop-hadoop-namenode-ubuntu.out
localhost: starting datanode, logging to /home/hadoop/opt/hadoop-2.6.0/logs/hadoop-hadoop-datanode-ubuntu.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is 1a:e1:fa:ce:18:2c:44:b7:0f:3b:38:fc:fd:05:8d:97.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/opt/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-ubuntu.out

启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: NameNodeDataNodeSecondaryNameNode。(如果SecondaryNameNode没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试;如果 NameNode 或 DataNode 没有启动,请仔细检查之前步骤)。

hadoop@ubuntu:~/opt/hadoop-2.6.0$ jps

4576 Jps
4274 DataNode
4162 NameNode
4473 SecondaryNameNode

成功启动后,可以访问 Web 界面 http://localhost:50070 来查看 Hadoop 的信息:

Hadoop伪分布式实例-WordCount

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

hadoop@ubuntu:~/opt/hadoop-2.6.0$ bin/hdfs dfs -mkdir  -p  /user/hadoop

解释如下:

-mkdir [-p] <path> ... :
Create a directory in specified location.

-p Do not fail if the directory already exists

接着将 etc/hadoop 中的文件作为输入文件复制到分布式文件系统中,即将 /home/hadoop/opt/hadoop-2.6.0/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。上一步已创建了用户目录 /user/hadoop ,因此命令中就可以使用相对目录如 input,其对应的绝对路径就是 /user/hadoop/input:

$ bin/hdfs dfs -mkdir -p  /user/hadoop/input
$ bin/hdfs dfs -put  etc/hadoop/*.xml  /user/hadoop/input

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

hadoop@ubuntu:~/opt/hadoop-2.6.0$ bin/hdfs dfs -ls  /user/hadoop/input

或者使用

bin/hdfs dfs -ls   .

Found 8 items

-rw-r--r-- 1 hadoop supergroup 4436 2015-05-13 18:26 input/capacity-scheduler.xml
-rw-r--r-- 1 hadoop supergroup 991 2015-05-13 18:26 input/core-site.xml
-rw-r--r-- 1 hadoop supergroup 9683 2015-05-13 18:26 input/hadoop-policy.xml
-rw-r--r-- 1 hadoop supergroup 1121 2015-05-13 18:26 input/hdfs-site.xml
-rw-r--r-- 1 hadoop supergroup 620 2015-05-13 18:26 input/httpfs-site.xml
-rw-r--r-- 1 hadoop supergroup 3523 2015-05-13 18:26 input/kms-acls.xml
-rw-r--r-- 1 hadoop supergroup 5511 2015-05-13 18:26 input/kms-site.xml
-rw-r--r-- 1 hadoop supergroup 690 2015-05-13 18:26 input/yarn-site.xml

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

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input  output  'dfs[a-z.]+'

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

$ bin/hdfs dfs -cat output/*

在hdfs中把输出结果删除

bin/hdfs dfs -rmr   outpu

将运行结果取回到本地:

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

结果如下:

1    dfsadmin

1    dfs.replication

1    dfs.namenode.name.dir

1    dfs.datanode.data.dir

Hadoop运行程序时,默认输出目录不能存在,因此再次运行需要执行如下命令删除 output文件夹:

$ bin/hdfs dfs -rmr /user/hadoop/output     # 删除 output 文件夹






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值