RedHat_Hadoop_单机|伪分布配置

本文中所有x xxx均为未知 须根据你得具体版本号来决定

创建用户

groupadd hadoop_user
useradd -g hadoop_user -d /home/hadoop hadoop
passwd hadoop 

配置YUM源

Redhat 的更新包只对注册的用户生效,所以我们需要自己手动更改成CentOS的更新包,CentOS几乎和redhat是一样的,所以无需担心软件包是否可安装,安装之后是否有问题。

1、 首先删除redhat原有的yum ,因为redhat 原本的yum 没有注册为redhat用户是用不了的。

rpm -aq|grep yum|xargs rpm -e --nodeps
rpm -aq|grep python-iniparse|xargs rpm -e --nodeps

2、下载163的yum 安装包

wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-3.4.3-150.el7.centos.noarch.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
python-iniparse-0.4-9.el7.noarch.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7.3.1611/os/x86_64/Packages/
yum-plugin-fastestmirror-1.1.31-40.el7.noarch.rpm

3、安装下载的rpm包

rpm -ivh *.rpm

4、创建文件/etc/yum.repos.d/rhel-debuginfo.repo并写入

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/7.3.1611/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7


#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.163.com/centos/7.3.1611/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7


[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.163.com/centos/7.3.1611/extras//$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/7.3.1611/os/x86_64/RPM-GPG-
KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.163.com/centos/7.3.1611/centosplus//$basearch/
gpgcheck=1
enabled=0

6、执行命令

yum clean all

7、测试:

yum update

8、 安装 epel 源:

yum install epel-release	

添加sudoer

当用户不在sudoers文件中……

处理这个问题很简单,但应该先理解其原理再操作

首先要明白root的密码一般用户是不应改知道的,但一般用户有时可能要用到root的一些权限。

这里就有了一个 /etc/sudoers文件,用来保存一些用户,使这些用户可以通过sudo命令来暂时获取root的权限。这些用户使用sudo时输入的密码是当前用户密码,而不是root密码。还可一在sudoers文件里限制一般用户的权限,这样就有了安全保证。

现在要让hadoop用户获得sudo使用权

1.切换到超级用户root

$su root

2.查看/etc/sudoers权限,可以看到当前权限为440

 $ ls -all /etc/sudoers
	-r--r----- 1 root root744  6月  8 10:29/etc/sudoers

3.更改权限为777

$chmod 777/etc/sudoers

4.编辑/etc/sudoers

 $vi /etc/sudoers

5.在root ALL=(ALL:ALL) ALL 下面添加一行

hadoop   ALL=(ALL)ALL

保存退出。
第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明jack可以在此主机上执行后 面的命令。

第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。
最后一个ALL当然就是指命令名了。
具体这里不作说明

6.把/etc/sudoers权限改回440

$chmod 440 /etc/sudoers

7.操作完成,切换到hadoop用户测试一下

ssh免密码

cd ~/.ssh/
ssh-keygen -t rsa  

这边一路回车就好

cat ./id_rsa.pub >> ./authorized_keys

test:

ssh localhost 

测试一下是否免密码了

jdk环境配置

Java SE Development Kit 8 Downloads

按照实验手册的要求我们将它解压到 root/usr/java这个目录下

那么jdk用户目录是 /usr/java/java-xxx (这边视具体情况自己补全吧,下面同

设置环境变量

vim ~/.bashrc

在文件最后面加入单独一行

export JAVA_HOME=/usr/java/java-xxx

使得环境生效

source ~/.bashrc

检验配置是否正确:

echo $JAVA_HOME    # 检验变量值
java -version
$JAVA_HOME/bin/java -version   

如果与直接执行 java -version 一样则成功

hadoop单机配置

记得下载binary版本的

Hadoop

下载完一般没问题,如果出现了奇怪的问题强烈建议check下md5码

mkdir ~/hadoop_installs

将下载下来的安装包丢到该目录解压

tar -zxvf hadoop-2.7.x.tar.gz

测试文件是否完整,因为是编译好的,解压完就能用

cd /home/hadoop_installs/hadoop-2.7.x
./bin/hadoop version

若显示版本号 那就正常了

配置环境变量

编辑~/.bashrc

gedit ~/.bashrc

添加如下内容:

export HADOOP_HOME=/home/hadoop_installs/hadoop-2.7.x 
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

保存后不要忘了执行以下命令使配置生效

source ~/.bashrc

hadoop单机运行

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此选择运行 grep 例子,将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[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 'dfs[a-z.]+'
cat ./output/*          # 查看运行结果

此处提示“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不会影响 Hadoop 正常运行(可通过编译 Hadoop 源码解决,解决方法请自行搜索)。 源头是binary是在一个32位的机器上编译的。

若出现提示 “INFO metrics.MetricsUtil: Unable to obtain hostName java.net.UnknowHostException”,这需要执行如下命令修改 hosts 文件,为你的主机名增加IP映射:

sudo vim /etc/hosts

在最后面增加一行 “127.0.0.1 dblab”

保存文件后重新运行 hadoop 实例,若执行成功的话会输出很多作业的相关信息,最后的输出信息如下图所示。作业的结果会输出在指定的 output 文件夹中,通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了1次

注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。
rm -r ./output

这边如果遇上运行后不知道java位置的情况,可以将更改配置文件hadoop-env.sh其中直接写详细的java位置即可 不过这不是根本解决方法 还是检查下自己之前的配置

hadoop伪分布配置

在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行上面的环境配置即可

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

gedit ./etc/hadoop/core-site.xml

改为:

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>
</configuration>

同样的修改 hdfs-site.xml

gedit ./etc/hadoop/hdfs-site.xml

改为

<configuration>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>

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

./bin/hdfs namenode -format
其实这里如果之前配置生效可以直接hdfs namenode -format了

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

接着开启 NaneNode 和 DataNode 守护进程:

./sbin/start-dfs.sh

若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。

启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。(具体请参考ref链接)

成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

运行Hadoop伪分布式实例

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

./bin/hdfs dfs -mkdir -p /user/hadoop

接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
wordcount测试:

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

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

./bin/hdfs dfs -ls input

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

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

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

./bin/hdfs dfs -cat output/*

我们也可以将运行结果取回到本地:

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)

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

Hadoop 运行程序时,输出目录不能存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次执行,需要执行如下命令删除 output 文件夹:

./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

若要关闭Hadoop,则运行:

./sbin/stop-dfs.sh

下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!

若要运行wordcount 直接 (前提你建好文件夹用上述方法传文件进去 同样 output运行前不能存在

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output	

启动YARN

伪分布式不启动 YARN 也可以,一般不会影响程序执行)
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。

上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。

首先修改配置文件 mapred-site.xml,这边需要先进行重命名

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

将其配置修改为:

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

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

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

然后就可以开启yarn了:

./sbin/start-yarn.sh      $ 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况

开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程。

启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster

但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。

不启动 YARN 需重命名 mapred-site.xml
如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。

同样的,关闭 YARN 的脚本如下:

./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver

Referene:

Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
Yarn简单介绍及内存配置
Hadoop: Setting up a Single Node Cluster.
How to Setup Hadoop 2.8 on CentOS, Ubuntu and LinuxMint

posted @ 2017-04-21 11:52  ericyz  阅读(1250)  评论(0编辑  收藏  举报