您的位置:首页 > 运维架构

Hadoop的配置及运行WordCount

2014-10-21 16:06 441 查看


一、环境:

计算机Fedora 20、jdk1.7.0_60、Hadoop-2.2.0

二、步骤:

1 JDK及SSH安装配置:

1.1卸载Fedora自带的OpenJDK,安装Oracle的JDK

*由于Hadoop,无法使用OpenJDK,所以的下载安装Oracle的JDK。

1.1.1、以下为卸载再带的OpenJDK:

[master@localhost~]$ rpm -qa|grep jdk

java-1.7.0-openjdk-headless-1.7.0.60-2.4.7.4.fc20.i686

jdk-1.7.0_60-fcs.i586

java-1.7.0-openjdk-1.7.0.60-2.4.7.4.fc20.i686

[master@localhost~]$ yum -y remove java-1.7.0-openjdk-1.7.0.60-2.4.7.4.fc20.i686

然后到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载jdk,可以下载rpm格式的安装包或解压版的。rpm版本的下载完毕后可以运行安装,一般会自动安装在/usr/java/的路径下面。接下来就配置jdk的环境变量了。

[master@localhost~]$ sudo vi /etc/profile

1.1.2、进入到系统的环境变量配置文件,加入以下内容:(i进行编辑,编辑完毕按ESC,输入:wq,回车即保存退出

#Java &Hadoop Environment

exportJAVA_HOME=/usr/java/jdk1.7.0_60

exportPATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

exportHADOOP_HOME=/home/master/hadoop-2.2.0

exportPATH=$HADOOP_HOME/bin

截图如下:Java环境变量配置







1.2配置SSH

搭建hadoop分布式集群平台,为了实现通讯之间的可靠,防止远程管理过程中的信息泄露问题。配置ssh(安全外壳协议)是必不可少的步骤,以下为ssh的配置过程:

1.2.1、由于Fedora自带安装了ssh,不过默认没有开启。下面查看系统的ssh:



如上图已经安装了ssh,下面我们通过sudoservice
sshd start打开ssh服务,service sshd status未查看ssh的状态。


[master@localhost~]$ sudo service sshd start
Redirectingto /bin/systemctl start sshd.service
[master@localhost~]$ service sshd status



1.2.2、如上开启之后我们就要配置localhost:如果还没有密钥公钥对生成,则先用ssh-keygen指令生成一个密钥对

[master@localhost~]$ cd .ssh

[master@localhost.ssh]$ ls

[master@localhost.ssh]$ ssh-keygen -t rsa

由于实验平台的搭建,需要简单配置即可,出现的不用输入什么,直接三个回车就行了,就可以生成不需要密码的密钥公钥对了,从而实现自动访问。

如下的生成内容:



1.2.3、利用cp id_rsa.pub
authorized_keys(把公钥复制一份,并改名为authorized_keys,这步执行完,应该sshlocalhost可以无密码登录本机了,可能第一次要密码),这样可以将authorized_keys发给其他主机,以便认证登陆了。


[master@localhost.ssh]$ ls

id_rsa id_rsa.pub

[master@localhost.ssh]$ cp id_rsa.pub authorized_keys

[master@localhost.ssh]$ ls

authorized_keys id_rsa id_rsa.pub



2 Hadoop安装配置:

2.1下载并配置Hadoop的JDK环境

2.1.1、用Firefox键入http://www.apache.org/dyn/closer.cgi/hadoop/common/找了中意的源,下载相对稳定版本的hadoop。下载后路径一般为/home/master/下载/。接下来解压修改配置文件,加入jdk的路径。

new:2.2.X
[master@localhost~]$ tar -xzf /home/master/下载/hadoop-2.2.0.tar.gz
[master@localhost~]$ cd hadoop-2.2.0/etc/hadoop
[master@localhosthadoop]$ vi hadoop-env.sh

*如果你想解压到其他地方,在tar最后写明路径,不然自动解压与当前用户路径当中。

由于安装的为hadoop_2.2.0则hadoop-env.sh文件位于/
hadoop-2.2.0/etc/hadoop路径之下,好像老版本的在/hadoop-1.2.1/conf/当中,如果找不到可以搜索hadoop-env.sh。


2.1.2、打开文件后在最后加入jdk路径:export
JAVA_HOME=/usr/java/jdk1.7.0_60


# The onlyrequired environment variable is JAVA_HOME. All others are
#optional. When running a distributedconfiguration it is best to
# setJAVA_HOME in this file, so that it is correctly defined on
# remotenodes.

# The javaimplementation to use.
exportJAVA_HOME=/usr/java/jdk1.7.0_60

以下为实现截图:





2.2为系统配置Hadoop环境变量

此为配置系统环境变量

最后加上:exportHADOOP_HOME=/home/master/hadoop-2.2.0/

[master@localhosthadoop]$ sudo vi /etc/profile
//使编辑过的环境变量配置生效
[master@localhost~]$ source /etc/profile



*附加:如果为了安全起见,不让系统其他用户共享这个环境变量可以选择配置用户变量(配置bash环境变量)

在在PATH处加上:

# User specific environment and startupprograms

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/hadoop-2.2.0/bin:/usr/java/jdk1.7.0_60/bin

//使配置文件不用重启直接生效生效
[master@localhost~]$ source ~/.bash_profile

环境变量配置完成,通过echo$PATH查看路径配置



输入hadoop查看Hadoop配置成功(需要重启)



2.3修改Hadoop的配置文件

*以下配置文件主要设置为了完成实验吧,如果要更详细的,可以上网查阅相关hadoop配置文件说明。

*以下为配置成伪分布式主要还是因为完成实验,测试hadoop。

2.3.1、配置HDFS的地址及端口号(core-site.xml):

加入HDFS地址及端口:

如果不配置,则默认使用8020端口。修改core-site.xml(伪分布式使用IP地址而不是主机名或localhost的好处是不需要修改/etc/hosts,当然全分布式还是需要修改的)。

fs.default.name描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。

hadoop.tmp.dir hadoop文件系统依赖的基础配置,很多路径都依赖它,如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中。

[master@localhost~]$ cd hadoop-2.2.0/etc/hadoop

[master@localhosthadoop]$ vi core-site.xml

configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://localhost:9010</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/master/hadoop-2.2.0/hdfs/hadooptmp</value>

</property>

</configuration>





2.3.2、修改HDFS文件的备份方式(hdfs-site.xml)

dfs.name.dir指定name镜像文件存放目录,如不指定则默认为core-site中配置的tmp目录。

dfs.data.dir数据存放的目录,如果不写默认为core-site中配置的tmp目录。

dfs.replication数据节点冗余备份的数量,它决定着系统里面的文件块的数据备份个数。对于一个实际的应用,它应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失),实验可以相对的小一点。

[master@localhosthadoop]$ vi hdfs-site.xml

<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/master/hadoop-2.2.0/hdfs/name1,/home/master/hadoop-2.2.0/hdfs/name2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/master/hadoop-2.2.0/hdfs/data1,/home/master/hadoop-2.2.0/hdfs/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>





2.3.3、配置JobTracker的地址及端口(mapred-site.xml)

mapred.job.tracker -JobTracker的主机(或者IP)和端口。

[master@localhosthadoop]$ vi mapred-site.xml

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>localhost:9001</value>

</property>

</configuration>





2.4初始化HDFS文件系统,和启动Hadoop

2.4.1、初始化HDFS文件系统

[master@localhost~]$ hadoop namenode -format





2.4.2、启动Hadoop

即运行start-all.sh,由于hadoop_2.2.0在/home/master/hadoop-2.2.0/sbin/路径中,老版本不在这里面,如果找不到可以搜索一下。不过新版本可以分别运行,start-dfs.sh或start-yarn.sh(另一种MapReduce新框架
Yarn),这里只用hdfs即可,可以直接start-dfs.sh。

然后通过jps查看jvm运行程序。jps(JavaVirtual
Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令搜索。

[master@localhosthadoop]$ /home/master/hadoop-2.2.0/sbin/start-all.sh

或:

[master@localhosthadoop]$ /home/master/hadoop-2.2.0/sbin/start-dfs.sh

[master@localhosthadoop]$ jps



如上图,DataNode,NodeManager,ResourceManager,NameNode,Jps,SecondaryNameNode这几个都应该显示运行才行,如果少了或如果连接被拒绝,请查看Hadoop的hadoop-env.sh中的JAVA_HOME是否配置,如果配置正确,则查看ssh是否打开。

2.4.3、利用hdfs dfsadmin –report查看日志文件中有没有报错。如果没有报错,说明Hadoop已经启动成功了。

[master@localhosthadoop]$ hdfs dfsadmin -report



2.4.4、以下为通过Web页面查看节点的状态:





2.5关闭HDFS

stop-all都停止dfs和mapred,stop-dfs只停止dfs服务,看你开启的了。好像新版本建议这两个分开开启和关闭吧。

[master@localhosthadoop]$ /home/master/hadoop-2.2.0/sbin/stop-all.sh
或:
[master@localhosthadoop]$ /home/master/hadoop-2.2.0/sbin/stop-dfs.sh



3运行WordCount:

3.1下载和编译WordCount示例

用Firefox键入http://www.apache.org/dyn/closer.cgi/hadoop/common/找了中意的源,然后在相关版本的目录下找到hadoop-2.2.0-src.tar.gz的源码压缩包下载,hadoop-2.2.0安装文件里面没有包含WordCount.java的示例,而是在hadoop-2.2.0-src里面。

3.1.1、WordCount.java路径如下:(也可以用搜索查找)

/hadoop-2.2.0-src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/WordCount.java

接下来就是在Home下新建一个hadoop文件方便解压后进一步编译,不过这一步纯属自愿。

3.1.2、将WordCount.java拷贝到用户目录新建的hadoop文件中:

[master@localhost~]$ cp/home/master/hadoop-2.2.0-src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/WordCount.java~/hadoop/



3.1.3、编译WordCount.java

由于编译这个文件需要几个hadoop的class文件。以下为编译的classpath:

*注classpath:(hadoop-2.2.0)
$HADOOP_HOME/share/hadoop/common/hadoop-common-2.2.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

3.1.4、javac编译WordCount.java,在Home下新建一个class放置生成的class,也可以放在hadoop文件中。

[master@localhosthadoop]$ javac -classpath /home/master/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar:/home/master/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar:/home/master/hadoop-2.2.0/share/hadoop/common/lib/commons-cli-1.2.jarWordCount.java
-d ~ /class



3.1.5、将生成的class,打包成jar

[master@localhost~]$ jar cvf WordCount.jar -C class/ .

//或者进入class文件用如下命令

[master@localhostclass]$ jar cvf WordCount.jar *



3.2建立文本文件并上传至DFS

*由于测试的是WordCount,只用新建普通文本文件即可,这里主要为完成实验。

3.2.1、创建本地示例文件

可以用gedit建file1.txt并将文本记录到里面,或是用命令行echo建文件及输入内容。首相创建一个file文件,保存示例文本文件。

[master@localhost~]$ mkdir ~/file
[master@localhost~]$ cd file
[master@localhostfile]$ echo "Hello Hadoop Goodbye Hadoop" > file2.txt





3.2.2、在HDFS上创建输入文件夹

先用hadoop fs –ls如果提示没有路径或文件,则我们需要先创建一个DFS的默认工作路径/user/{$USER}。一般初次都需要这个设置。(本机用户名{$USER}为master,以下需要一步步设置,我也不太清楚这是为什么~)

[master@localhost~]$ hadoop fs -mkdir /user
[master@localhost~]$ hadoop fs -mkdir /user/master
[master@localhost~]$ hadoop fs -mkdir /user/master/input



3.2.3、将本地file中的文件上传到DFS的input目录下

[master@localhosthadoop]$ hadoop fs -put ~/file/file*.txt input

[master@localhosthadoop]$ hadoop fs -ls input



*以上存在一些问题,如果hadoop fs –ls提示无路径或文件请加上/斜杠,最好直接表明/user/master/input这样的路径,不过初次之后都只需要hadoop
fs –ls input就可以显示input内的内容了,完全不知道这是为什么。所以出错就检查是不是/user/master/input这样的路径。如果建的错误了可以用以下命令删除路径:(可多尝试几次)


//删除目录与目录下所有文件
[master@localhosthadoop]$ hadoop fs -rm -r /input



3.3 MapReduce执行过程显示信息

*备注:以input作为输入目录,output目录作为输出目录。

3.3.1、执行WordCount

[master@localhost~]$ hadoop jar /home/master/hadoop/WordCount.jarorg.apache.hadoop.examples.WordCount input output

*其中:

hadoop jar为直线“jar”命令

/home/master/hadoop/WordCount.jar为WordCount.jar所在路径

org.apache.hadoop.examples.WordCount为WordCount.jar中WordCount.class的路径,类似java中调用函数那样import,指定类的位置,其间用点(.)隔开。



*以上没有提示错误则成功运行了WordCount示例。如果出现错误提示,其中出现Input
path does not exist这样的提示,那么有可能是DFS的路径配置有错误,请跳到[2.3将本地file中的文件上传到DFS的input目录下]内容重新配置DFS文件存储。


3.3.2、查看结果输出文件内容

//可以用-ls查看文件内容
[master@localhost~]$ hadoop fs -cat /user/master/output/part-r-00000
//或是:如果出错
[master@localhost~]$ hadoop fs –cat output/part-r-00000



结尾:

感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐