Hadoop(伪分布、集群模式)安装,Hadoop开发插件安装,以及出现的问题、异常解决方法

Hadoop由Apache基金会开发的分布式系统基础架构,是利用集群对大量数据进行分布式处理和存储的软件框架。用户可以轻松地在Hadoop集群上开发和运行处理海量数据的应用程序。Hadoop有高可靠,高扩展,高效性,高容错等优点。Hadoop 框架最核心的设计就是HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算。此外,Hadoop还包括了Hive,Hbase,ZooKeeper,Pig,Avro,Sqoop,Flume,Mahout等项目。

Hadoop的运行模式分为3种:本地运行模式,伪分布运行模式,完全分布运行模式。

(1)本地模式(local mode)

这种运行模式在一台单机上运行,没有HDFS分布式文件系统,而是直接读写本地操作系统中的文件系统。在本地运行模式(local mode)中不存在守护进程,所有进程都运行在一个JVM上。单机模式适用于开发阶段运行MapReduce程序,这也是最少使用的一个模式。

(2)伪分布模式

这种运行模式是在单台服务器上模拟Hadoop的完全分布模式,单机上的分布式并不是真正的分布式,而是使用线程模拟的分布式。在这个模式中,所有守护进程(NameNode,DataNode,ResourceManager,NodeManager,SecondaryNameNode)都在同一台机器上运行。因为伪分布运行模式的Hadoop集群只有一个节点,所以HDFS中的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序的执行。本次实验就是在一台服务器上进行伪分布运行模式的搭建。

(3)完全分布模式

这种模式通常被用于生产环境,使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及SecondaryNameNode运行的主机。在完全分布式环境下,主节点和从节点会分开。


 Hadoop伪分布模式安装

step 0: 此步为可选项,建议用户创建一个新用户及用户组,后续的操作基本都是在此用户下来操作。但是用户亦可在自己当前非root用户下进行操作。创建一个用户,名为liudm,并为此用户创建home目录,此时会默认一个与liudm同名的用户组。

sudo useradd ‐d /home/liudm ‐m liudm

为liudm用户设置密码,执行下面的语句

sudo passwd **********   // *处为密码

按提示消息,输入密码以及确认密码即可,此处密码设置为liudm,将liudm用户的权限,提升到sudo超级用户级别

sudo usermod ‐G sudo liudm

后续操作,我们需要切换到liudm用户下来进行操作。

su ‐ liudm

 step 1:配置SSH免密码登陆

SSH免密码登陆需要在服务器执行以下命令,生成公钥和私钥对

ssh-keygen -t rsa

此时会有多处提醒输入在冒号后输入文本,这里主要是要求输入ssh密码以及密码的放置位置。在这里,只需要使用默认值,按回车即可。 

 

 此时ssh公钥和私钥已经生成完毕,且放置在~/.ssh目录下。切换到~/.ssh目录下,可以看到~/.ssh目录下的文件

cd ~/.ssh

ll

​ 

 在~/.ssh目录下,创建一个空文本,名为authorized_keys,将存储公钥文件的id_rsa.pub里的内容,追加到authorized_keys中,执行ssh localhost测试ssh配置是否正确。第一次使用ssh访问,会提醒是否继续连接,后续再执行ssh localhost时,就不用输入密码了。(如果使用ssh命令提示找不到“ssh”,先安装ssh,文末附有安装方法)

touch ~/.ssh/authorized_keys

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh localhost

step 2:创建两个目录/apps和/data,并为/apps和/data目录切换所属的用户为liudm及用户组为liudm。两个目录的作用分别为:/apps目录用来存放安装的框架,/data目录用来存放临时数据、HDFS数据、程序代码或脚本。

sudo mkdir /apps
sudo mkdir /data

sudo chown -R liudm:liudm /apps
sudo chown -R liudm:liudm /data

切换到根目录,执行 ls -l 命令,可以看到根目录下/apps和/data目录所属用户及用户组已切换为liudm:liudm。

step 3:配置HDFS

创建/data/hadoop1目录,用来存放相关安装工具,如jdk安装包jdk-8u191-linux-x64.tar.gz及hadoop安装包hadoop-2.8.5.tar.gz。切换目录到/data/hadoop1目录,使用wget命令,下载所需的hadoop安装包jdk-8u191-linux-x64.tar.gz及hadoop-2.8.5.tar.gz。(用wget命令下载文件时要避免下载成HTML文件,可以用ls -l /filename/查看文件大小或者用file /filename/ 查看文件类型)

mkdir -p /data/hadoop1
cd /data/hadoop1

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

 step 4:安装jdk。将/data/hadoop1目录下jdk-8u191-linux-x64.tar.gz解压缩到/apps目录下。其中,tar -xzvf 对文件进行解压缩,-C 指定解压后,将文件放到/apps目录下。

tar -xzvf /data/hadoop1/jdk-8u191-linux-x64.tar.gz -C /apps

切换到/apps目录下,我们可以看到目录下内容如下,再将jdk1.7.0_75目录重命名为java:

cd /apps
mv /apps/jdk1.8.0_191/  /apps/java

 

step 5:修改环境变量:系统环境变量或用户环境变量。输入下面的命令,打开存储环境变量的文件。

sudo vim ~/.bashrc

空几行,将java的环境变量,追加进用户环境变量中。Esc, 进入vim命令模式,输入 :wq !进行保存。

#java  
export JAVA_HOME=/apps/java  
export PATH=$JAVA_HOME/bin:$PATH

执行下面的命令让环境变量生效:

source ~/.bashrc

执行java命令,来测试环境变量是否配置正确。如果出现下面界面,则正常运行:

step 6:安装hadoop

切换到/data/hadoop1目录下,将hadoop-2.8.5.tar.gz解压缩到/apps目录下,为了便于操作,也将hadoop-2.8.5重命名为hadoop。

cd /data/hadoop1  
tar -xzvf /data/hadoop1/hadoop-2.8.5.tar.gz -C /apps/
mv /apps/hadoop-2.8.5/ /apps/hadoop

step 7:修改用户环境变量,将hadoop的路径添加到path中。

打开用户环境变量文件,将以下内容追加到环境变量~/.bashrc文件中,

sudo vim ~/.bashrc

#hadoop  
export HADOOP_HOME=/apps/hadoop  
export PATH=$HADOOP_HOME/bin:$PATH

让环境变量生效,并验证hadoop环境变量配置是否正常

source ~/.bashrc

hadoop version

step 8:修改hadoop本身相关的配置。

首先切换到hadoop配置目录/etc下,打开hadoop-env.sh配置文件,将JAVA_HOME追加到hadoop-env.sh文件中。

vim /apps/hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/apps/java

打开core-site.xml配置文件,添加下面配置到<configuration>与</configuration>标签之间。(这里有两项配置:一项是hadoop.tmp.dir,配置hadoop处理过程中,临时文件的存储位置。这里的目录/data/tmp/hadoop/tmp需要提前创建。另一项是fs.defaultFS,配置hadoop HDFS文件系统的地址。)

mkdir -p /data/tmp/hadoop/tmp

vim /apps/hadoop/etc/hadoop/core-site.xml

<property>
    <name>hadoop.tmp.dir</name>
    <value>/data/tmp/hadoop/tmp</value>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>       //有些人配置的value值是: hdfs://0.0.0.0:9000
</property>

打开hdfs-­site.xml配置文件,并添加下面配置到<configuration>与</configuration>标签之间。配置项说明:

  • dfs.namenode.name.dir,配置元数据信息存储位置;
  • dfs.datanode.data.dir,配置具体数据存储位置;
  • dfs.replication,配置每个数据库备份数,由于目前我们使用1台节点,所以,设置为1,如果设置为2的话,运行会报错。
  • dfs.replications.enabled,配置hdfs是否启用权限认证
vim /apps/hadoop/etc/hadoop/hdfs­-site.xml

<property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/tmp/hadoop/hdfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/tmp/hadoop/hdfs/data</value>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>

另外/data/tmp/hadoop/hdfs路径,需要提前创建。

mkdir ‐p /data/tmp/hadoop/hdfs

step 9:打开slaves配置文件。将集群中slave角色的节点的主机名,添加进slaves文件中。目前只有一台节点,所以slaves文件内容为:

vim /apps/hadoop/etc/hadoop/slaves

localhost

step 10:格式化HDFS文件系统

hadoop namenode -format

step 11:启动相关进程。

切换到/apps/hadoop/sbin目录下,启动hadoop的hdfs相关进程。(这里只会启动HDFS相关进程。)

cd /apps/hadoop/sbin/

./start-dfs.sh

输入jps查看HDFS相关进程是否已经启动。(如图,可以看到相关进程都已经启动)

此时可以再进一步验证HDFS运行状态。先在HDFS上创建一个目录,再执行命令,查看目录是否创建成功。

hadoop fs -mkdir /myhadoop1

hadoop fs -ls -R /

以上便是HDFS安装过程,接下来配置MapReduce相关配置。

step 12:切换到hadoop配置文件目录,将mapreduce的配置文件mapred-site.xml.template,重命名为mapred-site.xml。打开mapred-site.xml配置文件。将mapreduce相关配置,添加到<configuration>标签之间。(这里指定mapreduce任务处理所使用的框架。)

cd /apps/hadoop/etc/hadoop
mv /apps/hadoop/etc/hadoop/mapred-site.xml.template  /apps/hadoop/etc/hadoop/mapred-site.xml
vim /apps/hadoop/etc/hadoop/mapred-site.xml

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

打开yarn-site.xml配置文件,将yarn相关配置,添加到<configuration>标签之间。(这里的配置是指定所用服务,默认为空。)

vim /apps/hadoop/etc/hadoop/yarn-site.xml

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

step 13:启动计算层面相关进程,切换到hadoop启动目录。执行命令,启动yarn。输入jps,查看当前运行的进程。

cd /apps/hadoop/sbin/

./start-yarn.sh

jps

step 14:执行测试。

切换到/apps/hadoop/share/hadoop/mapreduce目录下。然后,在该目录下跑一个mapreduce程序,来检测一下hadoop是否能正常运行。这个程序是计算数学中的pi值。当然暂时先不用考虑数据的准确性。当能看到下面流程的时候,表示程序已正常运行,hadoop环境也是没问题的。

cd /apps/hadoop/share/hadoop/mapreduce/

hadoop jar hadoop-mapreduce-examples-2.8.5.jar pi 3 3

至此,Hadoop 伪分布模式已经安装完成!


 Hadoop完全分布模式安装(集群模式)

  • 了解hadoop的完全分布式安装与伪分布式安装,单机安装的区别
  • 了解hadoop的集群搭建流程

step 0: 此步为可选项,建议用户创建一个新用户及用户组,后续的操作基本都是在次用户下来操作。但是用户亦可在自己当前非root用户下进行操作。创建一个用户,名为zhangyu,并为此用户创建home目录,此时会默认一个与zhangyu同名的用户组。

sudo useradd ‐d /home/liudm ‐m liudm

为liudm用户设置密码,执行下面的语句

sudo passwd **********   // *处为密码

按提示消息,输入密码以及确认密码即可,此处密码设置为liudm,将liudm用户的权限,提升到sudo超级用户级别

sudo usermod ‐G sudo liudm

后续操作,我们需要切换到zhangyu用户下来进行操作。

su ‐ liudm

step 1:添加hosts的地址映射,用ifconfig 或 ip a 命令获取三台服务器的ip地址;

将他们的IP地址和对应的映射名都添加到三台服务器上的/etc/host 文件里

sudo vim /etc/hosts
192.168.58.140          master
192.168.58.138          slave1
192.168.58.141          salve2

添加到192.168.58.130服务器master上

添加到192.168.58.138服务器slave1上

添加到192.168.58.139服务器slave2上

step 2 :首先来配置SSH用于集群间免密码登陆,SSH免密码登陆需要在三台服务器执行以下命令,生成公钥和私钥对

ssh‐keygen ‐t rsa

此时会有多处提醒输入,在冒号后输入文本,这里主要是要求输入 ssh密码以及密码的放置位置。在这里,只需要使用默认值,按回车即可。(一路Enter~~~

拷贝公钥到各个节点,包括本机,过程中需要输入用户的密码:

master主机:

slave1主机和slave2主机同上。

下面测试ssh配置是否正确,使用ssh命令连接到拷贝过公钥的节点,连接时会提醒是否继续连接,连接后记得使用exit命令退出当前连接。

step 3:下面分别在三台服务器上创建两个目录

sudo mkdir /apps
sudo mkdir /data

并为/apps和/data目录切换所属的用户为liudm及用户组为liudm

sudo chown ‐R liudm:liudm /apps
sudo chown ‐R liudm:liudm /data

这两个目录,/apps目录用来存放安装的框架;/data目录用来存放临时数据、HDFS数据、程序代码或脚本。
执行 ls -ld 可以看到,根目录下/apps和/data目录所属用户及用户组已切换为

ls ‐ld /apps
ls ‐ld /data

 

未完待续。。。。


Hadoop开发插件安装(Eclipse)

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。

Eclipse的插件机制是轻型软件组件化架构。在客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。 已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。

Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。

Eclipse基本内核包括:图形API (SWT/Jface), Java开发环境插件(JDT ),插件开发环境(PDE)等。

Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率。但是,它也有一些缺点,如编码、调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高,开发难度大。

因此,Hadoop的开发者为了降低Hadoop的难度,开发出了Hadoop Eclipse插件,它可以直接嵌入到Hadoop开发环境中,从而实现了开发环境的图形界面化,降低了编程的难度。

Hadoop Eclipse是Hadoop开发环境的插件,在安装该插件之前需要首先配置Hadoop的相关信息。用户在创建Hadoop程序时,Eclipse插件会自动导入Hadoop编程接口的jar文件,这样用户就可以在Eclipse插件的图形界面中进行编码、调试和运行Hadop程序,也能通过Eclipse插件查看程序的实时状态、错误信息以及运行结果。除此之外,用户还可以通过Eclipse插件对HDFS进行管理和查看。总而言之,Hadoop Eclipse插件不仅安装简单,使用起来也很方便。它的功能强大,特别在Hadoop编程方面为开发者降低了很大的难度,是Hadoop入门和开发的好帮手!

Eclipse插件的安装方法大体有以下四种:第一种:直接复制法,第二种:使用link文件法,第三种:使用eclipse自带图形界面安装,第四种:使用dropins安装插件,本次Hadoop开发插件安装使用了eclipse自带图形界面安装。

step 1 :安装Eclipse开发工具,安装目录为/apps/

linux系统下安装Eclipse有三种安装方式:

①apt方式

apt install eclipse-platform

优点是继承APT软件包管理的简单快捷,一行命令搞定。

②snap方式

snap install --classic eclipse

也是一行命令搞定,简单快捷。但是snap软件包管理器是Ubuntu 16.04才引入的,snap的优缺点即为本安装方式的优缺点。

③手动安装软件包方式

这种安装方式比较自定义化,可以自己选择eclipse的安装版本、安装环境以及安装目录等。

首先在eclipse官网下载符合自己操作系统的软件包:http://www.eclipse.org/downloads/packages/installer

安装过程中需要Java环境(JVM),如果是自己写Java,可以提前安装好JDK,如果不是用作开发,JRE环境也可以,当下最新的Ubuntu 18.04 LTS已经内置了JRE,所以这一步可以选择性省略。如果是没有Java环境,可以尝试以下简易安装命令。

apt install default-jre
apt-cache search jdk | grep Kit
apt install openjdk-8-jdk

然后解压下载好的eclipse安装包,进入解压后的文件夹目录,执行安装文件。

tar -xzvf eclipse-inst-linux64.tar.gz
cd eclipse-installer/
./eclipse-inst

或者进入文件夹,双击运行eclipse-inst。

 step 2:下载hadoop-eclipse-plugin-2.6.0.jar

或者下载源码自行编译:https://github.com/winghc/hadoop2x-eclipse-plugin

将其拷贝到/apps/eclipse/eclipse/plugins的插件目录下。

需要注意的是eclipse3.5版本以前,插件jar包需要放在/plugins目录,而在eclipse3.5及以后版本,插件需要放在/dropins目录下,否则IDE不能识别。

step 3:进入图形界面,启动eclipse。左侧项目栏就会出现DFS Locations,进入Window=>Preference也可以看见Hadoop Map/Reduce:

          

在Eclipse窗口界面,依次点击Window => Perspective => Open Perspective => Other(根据Eclipse版本的不同,点击顺序会有出入),弹出的窗口选择Map/Reduce,确定:

可以看到窗口中,有三个变化:左侧项目浏览器、右上角操作布局切换、面板窗口

 如果在windows下,则需要手动调出面板窗口Map/Reduce Locations面板,操作为,点击window => show view => Other。在弹出的窗口中,选择Map/Reduce Locations选项,并点击OK,这样便可以调出视图窗口Map/Reduce Location。

step 4: 添加Hadoop配置,连接Hadoop集群:在面板窗口,点击右侧蓝色小象图标,在这里添加Hadoop相关配置。

  • Location name,是为此配置起的一个名字
  • DFS Master,是连接HDFS的主机名和端口号

点击Finish保存配置。

另外还需保证Hadoop中的HDFS相关进程已经启动。在终端命令行输入jps查看进程状态。若不存在hdfs相关的进程,如Namenode、Datanode、secondarynamenode,则需要先切换到HADOOP_HOME下的sbin目录,启动hadoop。

step 5:展开左侧项目浏览视图,可以看到HDFS目录结构。此时在HDFS上,没有存放任何目录。那下面来创建一个目录,检测插件是否可用。

右键myhadoop下的文件夹,在弹出的菜单中,点击Create new directory,输入目录名称,点击OK则创建目录成功。右键文件夹,点击Refresh,可用刷新HDFS目录。


Hadoop安装过程中出现的异常和问题解决办法

1. 开启Hadoop后,执行命令报错:

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

虽不影响执行命令,直接把警告消息mute掉就好:

具体操作是直接在 log4j 日志中去除告警信息。找到后续目录为 etc/hadoop/log4j.propertieslog4j.properties 文件,在最后一行添加:log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

保存退出,重新执行命令,运行正常不报错

2. 验证ssh配置是否正确时,输入命令ssh localhost报错:ssh:connect to host localhost port 22: Connection refused

 检查是否安装了openssh-server:ps -e|grep ssh,如果只出现了一个ssh,说明没有安装,按下条(3)解决办法安装ssh;

sshd未启动:service sshd restart。

3. ssh-copy-id master 命令报错:ERROR: ssh: connect to host slave1 port 22: Connection refused

Ubuntu默认并没有安装ssh服务,如果通过ssh链接Ubuntu,需要自己手动安装openssh-server。

判断是否安装ssh服务,可以通过如下命令进行:ssh localhost

出现这个问题是因为Ubuntu默认没有安装openssh-server,用命令来安装openssh-server,命令如下:

sudo apt-get install openssh-server

4. 安装Eclipse时报错

图形界面安装时:

A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse Installer. No Java virtual machine was found after searching the following locations:/apps/eclipse/jre/bin/java

java in your current PATH

命令行安装:

执行安装命令后,提示:Eclipse Installer: 无法打开显示

日志信息为:

cat /apps/eclipse/configuration/1541141386610.log

!SESSION 2018-11-02 14:49:44.754 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_191
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=zh_CN
Command-line arguments:  -os linux -ws gtk -arch x86_64 -data @noDefault

!ENTRY org.eclipse.osgi 4 0 2018-11-02 14:49:59.619
!MESSAGE An error occurred while automatically activating bundle org.eclipse.oomph.setup.installer (135).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.oomph.setup.internal.installer.SetupInstallerPlugin$Implementation.start() of bundle org.eclipse.oomph.setup.installer.
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:803)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:732)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1005)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:357)

//……

出现这种情况可能的原因:

查看是否安装了JDK以及版本:

  • 没有装JDK:按上面所述方法安装
  • JDK版本不对:更换版本
  • JDK安装路径不对:如果已经安装了JDK,可以将安装jdk的整个文件夹拷贝至eclipse安装目录下,注意与上面报错的路径相对应上;或者打开编辑文件eclipse-inst.ini,在开头加上以下内容(JDK的绝对路径),保存退出。
vim eclipse-inst.ini

-vm
/apps/java/bin/java

5. hadoop插件放在/eclipse/plugins目录下,但是eclipse识别不出来/不能显示

解决方法:检查hadoop-eclipse-plugin-2.6.0.jar的路径

  • eclipse3.5以前:/plugins目录
  • eclipse3.5及以后版本:/dropins目录

6. 新建hadoop连接,报错:

错误显示:
An internal error occurred during: "Map/Reduce location status updater".
java.lang.NullPointerException

报错原因:hdfs里面没有文件,故没有任何返回值NullPointerException。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值