Hadoop快速实战(二)——搭建分布式

来源:互联网 发布:c语言if else语句格式 编辑:程序博客网 时间:2024/04/29 10:30

前提,需要有linux环境

参见linux环境准备

一、安装hadoop

1、上传hadoop

我所使用的hadoop是hadoop-2.4.1.tar.gz,将其上传到用户所在目录下,并在用户目录下创建app目录,用于方便管理。将hadoop解压到该目录下

这里写图片描述

2、hadoop目录说明

进入app中可以看到hadoop-2.4.1的目录,进入看到
这里写图片描述

bin:可执行文件目录sbin:系统可执行文件etc:配置文件lib:与本地平台相关的库,这里的本地平台是linuxshare:核心jar包和文档

二、修改配置文件

配置文件都在etc目录下的hadoop文件夹中

1、hadoop-env.sh中的jdk修改

这个文件整体是不需要改的,但是如果你的jdk是用户自定义安装的而不是全局的,那么很有可能就获取不到,这时候需要修改jdk所在目录,将指定的jdk目录写死在文件中。
这里写图片描述

2、core-site.xml

指定默认文件系统
指定文件存储根目录

configuration标签默认是空的,添加如下内容

<configuration><property><name>fs.defaultFS</name>// ip地址也可以用主机名代替<value>hdfs://192.168.49.31:9000/</value></property><property><name>hadoop.tmp.dir</name><value>/home/fangxin/app/hadoop-2.4.1/tmp/</value></property></configuration>

fs.defaultFS表示默认文件系统
hdfs://192.168.49.31:9000表示是hdfs系统,在31服务器上,监听端口9000

hadoop.tmp.dir指定文件存储根目录,hadoop会在该目录下创建dfs文件目录,namenode创建namenode文件夹,datanode创建datanode文件夹。
如果配置该参数,那么就会以hadoop的tmp作为根目录,而这个目录重启后会清空。

3、hdfs-site.html

副本数量配置

<configuration><property><name>dfs.replication</name><value>1</value></property></configuration>

目前只有一个节点,所以备份1分

4、mapred-site.xml

目录下有mapred-site.xml.tempate,改为mapred-site.xml

mv mapred-site.xml.template mapred-site.xml

设置mapreduce的默认资源调度框架,我用yarn

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>

5、yarn-site.xml

yarn框架也是集群,也有主节点和从节点,它的主节点叫resourcemanager

配置
主集群名称
中间数据调度机制,这里用mapreduce_shuffle机制

<configuration><!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value></value></property></configuration>

6、从机配置slaves(集群配置项)

将要运行的从机的host配置在主机的slaves文件中。这样启动master的时候就会将事先配置的从机启动起来。

如果secondaryNamenode和namenode分离,需要用到配置文件master,否则不需要

hadoop2hadoop3

其他配置

可以给服务器配置host,这样可以避免使用ip地址

三、启动

配置hadoop环境变量。

如果想用hadoop命令作为全局变量,首先需要配置

// 命令vi /etc/profile// 修改内容JAVA_HOME=/usr/java/jdk1.7.0_79export HADOOP_HOME=/home/fangxin/app/hadoop-2.4.1export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

格式化namenode

// 命令hadoop namenode -format// 格式化过程中会让你回答一次,注意要使用大写的Y

如果成功了,可以看到如下信息
这里写图片描述
如果报错了,返回步骤二重新检查配置。

成功之后,我们之前在core-site.xml中配置的文件存储目录”tmp”会生成,并且有dfs子目录。
这里写图片描述

启动hdfs

sbin目录下,执行命令

start-dfs.sh

依次启动了namenode、datanode、secondarynamenode,期间要多次确认身份,按提示做即可。

启动完毕后通过

// 该命令在jdk的bin目录下,java进程统计jsp

命令查看进程
这里写图片描述
也可以通过

netstat -nltp

查看每个进程监听的端口是多少
这里写图片描述
例如:进程25898的namenode监听的为9000端口。有的进程监听的不止一个端口,因为不同的通信使用不同的端口。

启动yarn

start-yarn.sh

启动后可以看到ResourceManager和NodeManager两个进程
这里写图片描述

hadoop常见命令行

  • 查看文件目录
    hadoop fs -ls hdfs://192.168.49.31:9000/ 或者 hadoop fs -ls /

    注意:如果有以下报错Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/fangxin/app/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.大概是hadoop默认编译的库是32位的。临时办法如下修改etc下面的hadoop-env.sh在末尾加上如下两行export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/nativeexport HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=$HADOOP_PREFIX/lib"但仍然有警告:17/02/08 09:03:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  • 存入文件

hadoop fs -put 文件名称 hdfs://192.168.49.31:9000/

存入hadoop的文件 在文件存储目录tmp的深处,具体位置在data/current/finalized文件夹中,如果大于128M则会被切分成多部分存储。

  • 取出文件
hadoop fs -get /文件名

其中/表示hadoop的根目录,如果在多个目录下,依次寻找即可

  • 创建目录
// 创建目录命令hadoop fs -mkdir /目录a/目录b
  • 查看文件
hadoop fs -cat /文件目录/文件名称

MapReduce测试运行

  • 统计单词数
    1、准备一个文件,可以是文本文件,内容可以是一些单词,例如hello,good等等
    2、将准备的文件上传到hadoop空间
    3、进入share文件夹下的mapreduce
    4、执行jar包 hadoop-mapreduce-example中的wordcount程序
hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /输入目录 /输出目录

如果按步骤执行可以,可以统计出你的文本单词内容
这里写图片描述

  • 计算圆周率
hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 10 10

四、SSH远程登录

由于hadoop底层是通过SSH远程授权认证的,所以如果我们不配置SSH密钥的话,就需要不停地通过输入密码执行各种远程操作,非常麻烦。即使是单节点的本地hadoop操作。

什么是SSH:Secure Shell(安全外壳协议)。从一台linux主机登录到另一台linux主机上去。

参见 SSH远程登录的密钥验证授权机制

linux的SSH配置步骤:
1、本地生成密钥对
2、远程scp拷贝公钥到服务端
3、服务端,在.ssh目录下创建文件

$ touch authorized_keys

4、追加公钥信息到上述文件中

// 追加信息操作$ cat ~/id_rsa.pub >authorized_keys

5、authorized_keys文件必须只能是该用户可读可写,其他用户组都是无权的状态才能生效。

$ chmod 600 authorized_keys

6、从客户端远程登录,如果不要密码,说明配置成功

$ ssh 服务端名称

模仿上述配置,虽然伪分布式只有单节点,也可以配置本地的SSH协议,启动和关闭hadoop就都不需要密码了

0 0