ubuntu版本是12.04,64位,首先安装JDK,JDK版本是1.8.0_111,把JDK解压到 /home/software/jdk1.8.0_111 中后,设置环境变量,在~/.bashrc中添加下列语句:
export JAVA_HOME=/home/k/software/jdk1.8.0_111/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
照着hadoop官方网站上面写的安装了ssh和pdsh工具,不知道pdsh工具有什么用,姑且先装上,执行下面两条语句就可以:
$ sudo apt-get install ssh $ sudo apt-get install pdsh
下载hadoop版本并解压。这次下载的是2.7.3版本,解压到路径/home/k/software/hadoop-2.7.3/,在其中找到 etc/hadoop/hadoop-env.sh这个文件,把JAVA_HOME路径写进去,虽然已经配置了java的环境变量,但是不写这个的话在后面启动namenode的时候会报错,修改如下:
export JAVA_HOME=/home/k/software/jdk1.8.0_111/jdk
也就是要和ubuntu里面的java环境变量一致
设置ssh免口令登录,这也是hadoop官方文档上写的步骤,如下:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
这时候应该可以试试hadoop的单点模式是不是能正常运行了,测试的方法是执行下面这写命令:
首先试试bin/hadoop能不能启动,执行命令:bin/hadoop
下面填写配置文件,搭建成伪分布式模式
先修改etc/hadoop/core-site.xml,这次是改成了下面这个样子:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/k/data/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
修改etc/hadoop/hdfs-site.xml文件,这次是改成了下面这个样子:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/k/data/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/k/data/hadoop/tmp/dfs/data</value>
</property>
</configuration>
格式化namenode:
bin/hdfs namenode -format
格式化成功的话应该会看到返回值是0
然后开启namenode和datanode:
sbin/start-dfs.sh
运行成功的话,可以通过执行jps命令看到NameNode,DataNode,SecondaryNameNode三个进程,并且通过浏览器也能访问管理页面,端口号用50070.
在伪分布式模式下执行WordCount,
先创建目录:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/k
把本地etc/hadoop文件夹复制到分布式文件系统中的/user/k/input文件夹:
bin/hdfs dfs -put etc/hadoop /user/k/input,中间会弹出一些警告信息,暂时不理会。
运行MapReduce程序,进行词频统计:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
查看运行结果:
bin/hdfs dfs -cat output/*
运行结果位于分布式文件系统中,也可以取回到本地文件系统中:
bin/hdfs dfs -get output output