配置单机的hadoop也有一些时间了,参考了许多的博客,也做了好多的尝试,最后终于成功了,这里写下自己配置过程中的步骤,只要按照这个步骤来应该是不会有问题的。如果有问题可以回帖提问,楼主这里已经解决了好多的遇到的问题。注:这里的大多数操作时按照michael-noll的博客来进行的。
这里使用的hadoop是1.2.1其它版本的hadoop于此类似。下面开始进行配置:
~$ sudo addgroup hadoop ~$ sudo adduser - -ingroup hadoop hadoop
至此创建了hadoop用户组和hadoop用户名,下面让hadoop用户具有管理员的权限,修改 /etc/sudoers
~$ sudo vim /etc/sudoers
在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL
下面切换到hadoop用户:
~$ su hadoop
hadoop使用SSH进行通信,所以我们需要配置SSH,并且为了保证各节点在访问的过程中不需要手动输入密码,所以要配置SSH为无密码。
SSH无密码原理:master(namenode/jobtrack)作为客户端,要实现无密码公钥认证,连接到服务器slave(datanode/tasktracker)上时,需要在master上生成一个公钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接slave时,slave就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。Master收到密钥加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误后就允许master进行连接了。这就是一个公钥认证的过程,期间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。hadoop@micaelpc:$ sudo apt-get install openssh-server
在将jdk拷贝到相应的目录下之后用下面的命令进行解压
hadoop@michaelpc:/usr/java$ ./jdk-6u45-linux-i586.bin
java的环境变量可以在~/.bashrc中添加,也可以在~/.profile中添加,这其中的区别可以到网上去搜,这里我们是在~/.profile 中添加:
hadoop@michaelpc:/usr/java$ vim ~/.profile 在后面添加: PATH=$PATH:$HOME/bin export JAVA_HOME=/usr/java/jdk1.6.0_45 export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin export CLASSPATH=$JAVA_HOME/lib:. 保存退出;然后查看效果 hadoop@michaelpc:/usr/java$ source ~/.profile hadoop@michaelpc:/usr/java$ java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)
这里选的hadoop的版本是:1.2.1下载地址是:http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/ 选择hadoop-1.2.1-tar.gz进行下载。
hadoop@michaelpc:/usr/local/hadoop$ vim conf/hadoop-env.sh 在# The java implementation to use. Required.下面加入: export JAVA_HOME=/usr/java/jdk1.6.0_45 export HADOOP_INSTALL=/usr/local/hadoop export PATH=$PATH:/usr/local/hadoop/bin 保存退出后运行: hadoop@michaelpc:/usr/local/hadoop$ source conf/hadoop-env.sh 让配置生效,之后运行: hadoop@michaelpc:/usr/local/hadoop$ hadoop version 如果出现下面,表示hadoop配置成功。 Warning: $HADOOP_HOME is deprecated. Hadoop 1.2.1 Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152 Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013 From source with checksum 6923c86528809c4e7e6f493b6b413a9a This command was run using /usr/local/hadoop/hadoop-core-1.2.1.jar
至此我们完成了单机hadoop的创建。
下面我们来进行单击的测试,我在hadoop下创建了一个test_in/file1.txt和file2.txt
hadoop@michaelpc:/usr/local/hadoop/test_in$ ll 总用量 16 drwxr-xr-x 2 hadoop hadoop 4096 4月 10 19:52 ./ drwxr-xr-x 19 hadoop hadoop 4096 4月 10 19:50 ../ -rw-r--r-- 1 root root 54 4月 10 19:52 file1.txt -rw-r--r-- 1 root root 51 4月 10 19:52 file2.txt之后用下面命令来执行,先是拷贝文件到hdfs然后再执行wordcout,然后在再查看结果
hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -copyFromLocal ./test_in test_in hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount test_in test_out 这里的test_in 和test_out都是hdfs文件系统,不能事先创建。 hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -cat test_out/* Warning: $HADOOP_HOME is deprecated. good 2 hadoop 4 hahh 2 hello 4 is 2 michael 1 michel 1 world 2
下面的配置用来完成伪分布式的配置:
因为之前在配置的过程中,启动时还有问题,最后是将IPV6手动关闭并重启之后才成功的,如果所在网络没有一IPV6,不需要设置,关闭的方式是进行如下编辑:
$ vim /etc/sysctl.conf #disable ipv6后添加 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1然后重启电脑,查看
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6如果是1,表示已经关闭。
core-site.xml是Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。注意如果是hadoop2.2.X等版本的话,这些配置文件的路径是不一样的,可自己到网上去搜索路径。
因为之前配置的时候创建的目录是在Hadoop/tmp/文件下,导致最后运行hadoop的时候找不到namenode.进入logs/文件查看发现是当前目录是inconsistent的,所以就将目录建在/app/Hadoop/tmp下。
在配置core-site.xml的时候需要先创建目录:
$ sudo mkdir -p /app/hadoop/tmp $ sudo chown hadoop:hadoop /app/hadoop/tmp #and if you want to tighten up security, chmod from 755 to 750... $ sudo chmod 750 /app/hadoop/tmp
之后是:
hadoop@michaelpc:/usr/local/hadoop$ vim conf/core-site.xml #将<configutation></configuration>之间修改为 <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/app/hadoop/tmp</value> </property> 保存退出
mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。下面依次介绍配置过程。
hadoop@michaelpc:/usr/local/hadoop$ vim conf/mapred-site.xml <property <name>mapred.job.tracker</name> <value>localhost:9001</value> </property>
hadoop@michaelpc:/usr/local/hadoop$ vim conf/hdfs-site.xml
<property> <name>dfs.replication</name> <value>2</value> </property>
hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop namenode -format Warning: $HADOOP_HOME is deprecated. 14/04/10 12:43:59 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = michaelpc/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 1.2.1 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by ‘mattf‘ on Mon Jul 22 15:23:09 PDT 2013 STARTUP_MSG: java = 1.6.0_45 ************************************************************
hadoop@michaelpc:/usr/local/hadoop$ bin/start-all.sh Warning: $HADOOP_HOME is deprecated. starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-namenode-michaelpc.out localhost: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-datanode-michaelpc.out localhost: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-secondarynamenode-michaelpc.out starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-jobtracker-michaelpc.out localhost: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-michaelpc.out 注意只有下面的六个进程均运行才表示运行成功 hadoop@michaelpc:/usr/local/hadoop$ jps 4490 DataNode 4858 TaskTracker 4345 NameNode 4634 SecondaryNameNode 4923 Jps 4716 JobTracker
到此我们完成了伪分布式的搭建。下面可以在网页上查看节点运行的信息等。
如下图:
实验所用的数据是从国外一个免费的电子书下载网站上下载的三个文档,分别是pg20417.txt等等。保存在/tmp/gutenberg上。下面是下载的链接:
我们下载的是Plain Text UTF-8的形式,保存在/tmp/test_in/目录下,也可以将多个的文件放在这个下面。//现将文件通过下面的命令拷贝到hadoop的文件系统hdfs中
hadoop@michaelpc:/usr/local/hadoop/bin$ hadoop dfs -copyFromLocal /tmp/test_in /user/hadoop/test_file //下面查看一下文件: hadoop@michaelpc:/usr/local/hadoop/bin$ hadoop dfs -ls /user/hadoop/ Warning: $HADOOP_HOME is deprecated. Found 1 items drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file //通过下面的语句进行运行,注意 wordcoutn file1path file2path 的语法。其中file2path是事先不存在的。 hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /user/hadoop/test_file /user/hadoop/out_file
这个时候可以去查看网页上的状态。
首先看一下是否产生输出文件:
hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -ls /user/hadoop/ Warning: $HADOOP_HOME is deprecated. Found 2 items drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:22 /user/hadoop/out_file drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file再查看一下结果:
hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -cat /user/hadoop/out_file/*这时候你发现被刷屏了,这时候可以拷贝hdfs文件到常规文件中用head命令查看
hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop dfs -getmerge /user/hadoop/out_file /tmp/out_file Warning: $HADOOP_HOME is deprecated. 14/04/10 19:46:53 INFO util.NativeCodeLoader: Loaded the native-hadoop library hadoop@michaelpc:/usr/local/hadoop$ ll /tmp/out_file -rwxrwxrwx 1 hadoop hadoop 55 4月 10 19:46 /tmp/out_file* hadoop@michaelpc:/usr/local/hadoop$ head /tmp/out_file -copyFromLocal 1 dfs 2 hadoop 1 hdfs 1 hello 1 world 1
至此已经完成了所有操作,如果读者在配置过程中有任何问题都可以回帖询问。
Ubuntu安装单机1.2.1hadoop与伪分布式模式进行WordCount实验,布布扣,bubuko.com
Ubuntu安装单机1.2.1hadoop与伪分布式模式进行WordCount实验
原文:http://blog.csdn.net/michael_kong_nju/article/details/23294795