Hadoop单机式伪分布式安装详解

Ubuntu、centos7、6集群搭建:https://blog.csdn.net/qq_40938267/article/details/83476896

遇到的问题以及解决方法:

1.在./bin/hdfs namenode –format时 加载不出class  查看配置的bashrc 你的/usr/local/hadoop路径中Hadoop的h的大小写 必须要一致

2. 在安装好Hadoop后,每次输入命令都会出现下面警告:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Stopping namenodes ...

提示hadoop不能加载本地库。
可以到$HADOOP_HOME/lib/native下,查看文件libhadoop.so.1.0.0,里面会显示Hadoop的位数,官网下载好的显示是64位的,如下所示:

[hadoop@dxer hadoop-2.6.4]$ cd lib/native/

[hadoop@dxer native]$ ls

libhadoop.a  libhadooppipes.a  libhadoop.so  libhadoop.so.1.0.0  libhadooputils.a  libhdfs.a  libhdfs.so  libhdfs.so.0.0.0

[hadoop@dxer native]$ file libhadoop.so.1.0.0

libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=b3b5e812c2a91fa4b28aa33eb76dc6889d3b91e9, not stripped

[hadoop@dxer native]$

文件和操作系统都是64位的那为什么还会出现这样的警告呢。肯定是少了什么配置,没让库文件加载进去。

只需要进行简单配置即可。

配置如下:

  1. 首先在bashrc中加入如下配置:

vim ~/.bashrc

配置如下

export HADOOP_HOME=/home/hadoop/hadoop-2.6.4

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

  1. 使上面配置生效:

source ~/.bashrc

ok,再去执行启动dfs/yarn或者运行hadoop相关命令的时候就不会再有上面的提示啦。

开始:

1、创建用户

# useradd -m hadoop -s /bin/bash

 

-d<登入目录>:指定用户登入时的启始目录;

 -D:变更预设值;

-e<有效期限>:指定帐号的有效期限;

-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;

-g<群组>:指定用户所属的群组;

-G<群组>:指定用户所属的附加群组;

 

-M:不要自动建立用户的登入目录;

-n:取消建立以用户名称为名的群组;

-r:建立系统帐号;

 

-u:指定用户id。

 

 

-m:自动建立用户的登入目录;

-s:指定用户登入后所使用的shell; /bin/bash/ 作为shell

 

shell只是用户与系统沟通的接口,各种不同的shell只是命令语法不用,语法不同而已。

 

-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;

 

2、password +用户  修改用户密码

3、visudo 用户 ALL=(ALL) ALL

sudo 是substitute user do (替用户做)的简写,它是一个应用程序。允许使用者透过安全的方式执行有特权的程序。

sudo的配置文件位于/etc/sudoers目录下,visudo会锁住此文件,保存修改到临时文件,然后检查文件格式,确保正确后才会覆盖sudoers文件。必须保证sudoers格式正确,否则sudo将无法运行。visudo调用的默认编辑器是vi

4、SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。

另外,spring的三点框架缩写也是ssh

SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。

5、,一般情况下,CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验:

 rpm -qa | grep ssh   RPM是RedHat Package Manger(RedHat软件管理工具),是一种用于打包及安装工具-qa代表query,a代表allgrep(global search rgular expression(RE) and print out the line):是一种强大的文本搜索工具

如果没有安装,使用yum进行安装:

$ sudo yum install openssh-clients

$ sudo yum install openssh-server

   yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,

 

6、$ ssh localhost

登录本地 需要密码

7、设置无密码登录

$ exit

$ cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost

$ ssh-keygen -t rsa   #rsa 专用密钥 ssh-keygen密码短语加密专用密钥 -t type
指定要创建的密钥类型

$ cat id_rsa.pub >> authorized_keys  # id_rsa.pub给公钥加入授权  id_rsa私钥id_rsa.pub追加到authorized_keys已认证的主机列表里面。 这样本机对本机就是已认证的状态

$ chmod 600 ./authorized_keys    # 600代表设置拥有者可读写,其他人不可读写执行 的authorized_keys文件权限

设置.ssh目录权限
$ chmod 700 -R .ssh

7、验证无密码登录$ ssh localhost

退出等Hadoop账户

8、安装java环境

    sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

配置一下 JAVA_HOME 环境变量在vim ~/.bashrc

 PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。

 CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的。

 JAVA_HOME环境变量。它指向jdk的安装目录

9.vim ~/.bashrc  

    etc/profile: 此文件为系统的每个用户设置环境信息。当用户登录时,该文件被执行一次,并从 /etc/profile.d 目录的配置文件中搜集shell 的设置。一般用于设置所有用户使用的全局变量。

     /etc/bashrc: 当 bash shell 被打开时,该文件被读取。也就是说,每次新打开一个终端 shell,该文件就会被读取

10.在文件最后加指向 JDK 的安装位置:export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk

11.source ~/.bashrc    # 使变量设置生效

source:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

~/是进入当前用户的主目录。比如我用的用户名是USER 那么命令 cd ~/ 就进入了/home/USER 目录

设置好后我们来检验一下是否设置正确:

  1. echo $JAVA_HOME     # 检验变量值  的路径
  2. java –version查看当前java版本
  3. $JAVA_HOME/bin/java -version  # 与直接执行 java -version 一样

安装 Hadoop 2

Weget是一个下载文件工具

wget http://labfile.oss.aliyuncs.com/hadoop-2.6.0.tar.gz

  1. cat ~/下载/hadoop-2.6.0.tar.gz.mds | grep 'MD5' # 列出md5检验值
  2. # head -n 6 ~/下载/hadoop-7.1.tar.gz.mds # 2.7.1版本格式变了,可以用这种方式输出
  3. md5sum ~/下载/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" # 计算md5值,并转化为大写,方便比较

 

  下载hadoop安装包

 Hadoop 安装至 /usr/local/ 中:

  1. sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local    # 解压到/usr/local中  -C是当前目录/home/usr1
  2. cd /usr/local/
  3. sudo mv ./hadoop-2.6.0/  ./hadoop        # 将文件夹名改为hadoop
  4. sudo chown -R hadoop:hadoop ./hadoop   ./ 代表当前目录

chown是命令用来修改目录的权限
-R代表递归,就是从当前目录到他最下面的子目录
hadoop:hadoop代表将目录和文件的owner和group都设成hadoop

owner:文件的属主(拥有者)group:用户组内成员other:其他用户
./hadoop代表从当前目录hadoop开始修改

5、 cd /usr/local/hadoop
6、./bin/hadoop version  输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
 Hadoop附带了丰富的例子。运行以下命令:可以看到所有例子,包括 wordcount、terasort、join、grep 等。 
# ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar
  1. cd /usr/local/hadoop
  2. mkdir ./input
  3. cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
10、./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
bin/hadoop jar(使用hadoop运行jar包) hadoop-*_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input output ‘dfs[a-z.]+’

整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。 查询文件input output 中的字符串



'dfs[a-z.]+'

这个是正则表达式,查询dfs开头的,后面跟1个或1个以上的字母,比如 dfsa dfsb dfsc
11、cat ./output/*          # 查看运行结果

若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不会影响 Hadoop 正常运行(可通过编译 Hadoop 源码解决,解决方法请自行搜索)。

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

  1. sudo vim /etc/hosts

Shell 命令

主机名在终端窗口标题里可以看到,或执行命令 hostname 查看,如下图所示,在最后面增加一行 “127.0.0.1 dblab”:

设置主机名的IP映射

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

Hadoop例子输出结果

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

  1. rm -r ./output

hadoop伪分布式配置

在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行如下命令在 ~/.bashrc 中设置:

  1. gedit ~/.bashrc

Shell 命令

这次我们选择用 gedit 而不是 vim 来编辑。gedit 是文本编辑器,类似于 Windows 中的记事本,会比较方便。保存后记得关掉整个 gedit 程序,否则会占用终端。在文件最后面增加如下内容:

  1. # Hadoop Environment Variables
  2. export HADOOP_HOME=/usr/local/hadoop   路径
  3. export HADOOP_INSTALL=$HADOOP_HOME   
  4. export HADOOP_MAPRED_HOME=$HADOOP_HOME    伪分布式数据处理MapReduce
  5. export HADOOP_COMMON_HOME=$HADOOP_HOME
  6. export HADOOP_HDFS_HOME=$HADOOP_HOME
  7. export YARN_HOME=$HADOOP_HOME
  8. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  9. export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

保存后,不要忘记执行如下命令使配置生效:

  1. source ~/.bashrc

 

 

<configuration>

<property>

        <name>fs.defaultFS</name>

        <value>hdfs://master:9000/</value>

        <description>默认的HDFS端口,用于NameNodeDataNode之间到的通讯,IPNameNode的地址</description>

    </property>

 

 

<property>

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

 <value>/root/BigData/hadoop-3.0.0/tmp</value>

  <description>存放hadoop文件系统依赖的基本配置</description>

 </property>

</configuration>

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>

 

# 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 的格式化:

  1. ./bin/hdfs namenode -format

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

 

接着开启 NaneNodeDataNode 守护进程:

  1. ./sbin/start-dfs.sh

 

Yes

 

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

Jps   JDK提供的一个显示当前所有java进程(pid)的命令

 

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

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

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

Mkdir -p可以直接创建多级目录

Shell 命令

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

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

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

  1. ./bin/hdfs dfs -ls /user/hadoop/input

 

Shell 命令

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

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

Shell 命令

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

  1. ./bin/hdfs dfs -cat output/*

Shell 命令

结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。

Hadoop伪分布式运行grep的结果

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

  1. rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
  2. ./bin/hdfs dfs -get output ./output     # HDFS 上的 output 文件夹拷贝到本机
  3. cat ./output/*

Shell 命令

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

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

Shell 命令

运行程序时,输出目录不能存在

运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:

  1. Configuration conf = new Configuration();
  2. Job job = new Job(conf);
  3.  
  4. /* 删除输出目录 */
  5. Path outputPath = new Path(args[1]);
  6. outputPath.getFileSystem(conf).delete(outputPath, true);

Java

若要关闭 Hadoop,则运行

  1. ./sbin/stop-dfs.sh

Shell 命令

注意

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

启动YARN

(伪分布式不启动 YARN 也可以,一般不会影响程序执行)

有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARNYet Another Resource Negotiator)。

YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。

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

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

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

Shell 命令

然后再进行编辑,同样使用 gedit 编辑会比较方便些 gedit ./etc/hadoop/mapred-site.xml

  1. <configuration>
  2.     <property>
  3.         <name>mapreduce.framework.name</name>
  4.         <value>yarn</value>
  5.     </property>
  6. </configuration>

XML

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

  1. <configuration>
  2.     <property>
  3.         <name>yarn.nodemanager.aux-services</name>
  4.         <value>mapreduce_shuffle</value>
  5.         </property>
  6. </configuration>

XML

然后就可以启动 YARN 了(需要先执行过 ./sbin/start-dfs.sh):

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

Shell 命令

开启后通过 jps 查看,可以看到多了 NodeManager ResourceManager 两个后台进程,如下图所示。

开启YARN

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

开启YARN后可以查看任务运行信息

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 的脚本如下:

  1. ./sbin/stop-yarn.sh
  2. ./sbin/mr-jobhistory-daemon.sh stop historyserver
  3. ./sbin/stop-dfs.sh 关闭Hadoopdfs
 

自此,你已经掌握 Hadoop 的配置和基本使用了

 

借鉴于以下资料并自己做出了详解:

https://blog.csdn.net/xqclll/article/details/53487952

www.powerxing.com/install-hadoop-in-centos/

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_40938267/article/details/83416665
今日推荐