【大数据基础】Hadoop集群环境伪分布式配置

本文使用环境为在VirtualBox上安装的CentOS虚拟机。这个安装部分比较简单,不再赘述,对这块不太熟悉的话可以参考【大数据基础】VirtualBox安装CentOS实操,考虑到生产环境多采用64位,本文中也使用64位的系统进行安装。

一、准备工作

在进入前需先做好网络配置,这部分在【大数据基础】VirtualBox安装CentOS实操中也做了介绍。接着需要做的是关闭防火墙,直接输入service iptables stop即可关闭防火墙,但这在重启后就会失效,要设置开机关闭防火墙请在命令行中输入chkconfig iptables off。
chkconfig iptables –list可以查看防火墙开机关闭状态,service iptables status可查看当前防火墙状态。
Linux iptables关闭方法

输入useradd hadoop添加用户hadoop,passwd hadoop两次输入密码来设置hadoop用户密码

Linux添加用户hadoop

二、安装JDK

安装方法一

可以去Oracle官网下载JDK然后上传到虚拟机上,对于可以上网的机器也可以直接通过wget命令下载到服务器上(未安装wget在命令行运行yum install wget -y来进行安装)。

然后为方便管理在/usr目录下创建一个java目录(),将所下载的JDK包直接解到到/usr/java目录

wget http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz
mkdir /usr/java
tar -xzvf jdk-8u66-linux-x64.tar.gz -C /usr/java/

安装方法二

除了通过tar包安装外还可以下载rpm包来完成安装,方法相似

wget http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.rpm
rpm -ivh jdk-8u66-linux-x64.rpm

配置环境变量

要方便地使用Java就必须要配置环境变量,我们在/etc/profile文件的最后添加如下配置

export JAVA_HOME=/usr/java/jdk1.8.0_66
export PATH=$JAVA_HOME/bin:$PATH

然后输入source /etc/profile在应用刚刚设置的配置,此时在命令行中输入echo $PATH就会发现/usr/java/jdk1.8.0_66/bin已经被添加到了环境变量中,可以在命令行中输入java -version查看版本号来进行验证。

三、安装Hadoop

我们将使用前面创建的hadoop用户来安装Hadoop,执行su – hadoop切换到hadoop用户,然后上传Hadoop安装包或在虚拟机上直接下载Hadoop安装包,然后将安装包解压到hadoop用户的根目录下(/home/hadoop)

root@hadoop01 ~]# su - hadoop
[hadoop@hadoop01 ~]$ wget http://apache.opencas.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
tar -xzvf hadoop-2.6.0.tar.gz 

免登录配置

为方便Hadoop在本地的使用乃至今后管理Hadoop集群,我们会生成一对密钥来实现免登录。在命令行键入ssh-keygen -t rsa并连续4次回车生成密钥(其中的rsa代表加密类型),其中id_rsa文件为私钥,id_rsa.pub文件为公钥(两个文件都在用户根目录的.ssh目录下)。

免登录生成公钥和私钥

实现免登录的原理实际上就是把公钥内容添加到所需免密码登录的主机的authorized_keys文件中,可以使用cat命令也可以使用专用的”ssh-copy-id -i 主机名或ip”来进行配置。当前我们采用伪分布式配置Hadoop,所以配置在本机上

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#上面的命令也可以使用ssh-copy-id -i localhost
chmod 0600 ~/.ssh/authorized_keys

此时发现已由之前ssh localhost需要输入密码变为免密码登录了(第一次登录需要输入设置为安全主机)
免密码登录本机

Hadoop配置文件

光解压Hadoop压缩包还未完成Hadoop的安装,需要修改的主要有以下5个配置文件,这几个文件都在hadoop安装包的etc/hadoop/目录下

cd hadoop-2.6.0/etc/hadoop/

1.hadoop-env.sh

在本文件中主要设置JAVA_HOME,将文件中export JAVA_HOME=${JAVA_HOME}部分的${JAVA_HOME}修改为Java的安装目录(/usr/java/jdk1.8.0_66)

export JAVA_HOME=/usr/java/jdk1.8.0_66

2.core-site.xml
在这个文件中主要配置NameNode的通信地址(fs.defaultFS)和hadoop运行时产生文件的存储路径(hadoop.tmp.dir)

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/hadoop-2.6.0/tmp</value>
        </property>
</configuration>

3.hdfs-site.xml
在本文件中主要设置hdfs的副本数量,本例中我们搭建的是伪分布式,因而设置为1

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

4.mapred-site.xml
默认是没有这个文件的,但有一个模板文件mapred-site.xml.template,可执行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
该文件中设置Reducer取数据的方式,这里是mapreduce_shuffl

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

这样我们就完成了Hadoop的配置,和Hadoop一样,为方便Hadoop命令的使用,也需要配置环境变量,可以在hadoop用户家目录的.bashrc或.bash_profile中进行配置,不过这里我们还是选择在/etc/profile中进行配置吧。这时需要执行exit切换回到root账号,将/etc/profile最后面的内容修改为:

export JAVA_HOME=/usr/java/jdk1.8.0_66
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

同样为何配置生效source一下该文件。

应用Hadoop

初次使用Hadoop时需要对NameNode进行格式化,只需执行如下命令

hdfs namenode -format

如果出现xxx has been successfully formatted.说明格式化成功

namenode格式化成功

此时还会发现hadoop-2.6.0下出现了一个tmp文件夹,接着启动HDFS和YARN,执行

start-dfs.sh
start-yarn.sh

注:如果前面在环境变量部分配置hadoop下的sbin目录,请切换到sbin目录执行相关命令(cd hadoop-2.6.0/sbin/),此时可使用jps命令查看运行的进程:

 jps命令执行结果

其中的NameNode和DataNode属于HDFS,ResourceManager和NodeManager属于YARN

在浏览器中输入http://192.168.1.110:50070/查看HDFS界面来进行进一步验证

Hadoop在浏览器端查看

输入http://192.168.1.110:8088/可查看YARN的管理界面

Hadoop的YARN管理界面

测试上传文件到HDFS

在hadoop用的家目录下执行

hadoop fs -put hadoop-2.6.0.tar.gz hdfs://hadoop01:9000/test

可将本地的文件上传到hdfs上,在http://192.168.1.110:50070/页面中可查看上传是否成功,可以看到文件已成功上传(也可在命令行中输入hadoop fs -ls /来进行查看)

HDFS查看文件系统

所上传的文件可以通过如下命令进行下载

hadoop fs -get hdfs://hadoop01:9000/test ./test_download

测试MapReduce和YARN
首先切换到mapreduce目下查看其中的jar包

cd hadoop-2.6.0/share/hadoop/mapreduce/

接着我们创建一个words文件用于进行wordcount测试:
vi words
hello tom
hello jerry
hello kitty
hello world
hello tom
将文件上传到hdfs上

hadoop fs -put words hdfs://hadoop01:9000/words

可使用hadoop fs -ls /进行验证
执行运算,结果输出到HDFS的output文件中

hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount hdfs://hadoop01:9000/words hdfs://hadoop01:9000/output

计算完成在浏览器端会发现有output有两个文件:_SUCCESS和part-r-00000,查看part-r-00000,内容为
hello 5
jerry 1
kitty 1
tom 2
world 1
这里按照字母顺序列出各个单词出现的次数。

注:如需使用主机名在浏览器中访问需要在本机的host文件中进行配置,Mac在/private/etc/hosts中配置,Windows在C:\WINDOWS\system32\drivers\etc\hosts中配置

四、安装HBase

1.首先下载并解压缩HBase文件

wget http://apache.opencas.org/hbase/stable/hbase-1.1.2-bin.tar.gz
tar -xzvf hbase-1.1.2-bin.tar.gz
mv hbase-1.1.2 hbase

2.然后修改两个配置文件:
a.hbase-env.sh设置JAVA路径

vi hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_66

b.hbase-site.xml

vi hbase/conf/hbase-site.xml
   <property>
      <name>hbase.rootdir</name>
      <value>hdfs://hadoop01:9000/hbase</value>
   </property>
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/hadoop/zookeeper</value>
   </property>
#伪分布式
   <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
   </property>

3.可将HBase的bin目录添加到.bash_profile中或者cd到hbase/bin目录下

启动hbase,执行hbase-start.sh,进入shell,执行hbase shell即可看到如下命令行窗口:

HBase Shell指令

此外在浏览器中输入http://hadoop01:16010/(如未绑定host可直接输入IP:http://192.168.1.110:16010/)也可验证HBase是否启动成功

HBase浏览器界面

五、安装Sqoop

1.首先下载并解压缩安装文件

wget http://apache.fayea.com/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

2.配置sqoop-env.sh

cd sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
#修改对应内容如下
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.6.0
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.6.0
export HBASE_HOME=/home/hadoop/hbase

3.安装mysql-connector-java

wget http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/mysql-connector-java-5.1.36.tar.gz
tar -xzvf mysql-connector-java-5.1.36.tar.gz
mv mysql-connector-java-5.1.36/mysql-connector-java-5.1.36-bin.jar sqoop/lib/

4.测试连接MySQL并查看其中的数据库
cd 到sqoop/bin目录下或者把该目录添加到bash_profile等文件中,然后执行如下指令并输入数据库密码即可列出所有数据库名称

sqoop-list-databases --connect jdbc:mysql://localhost/ --username root -P

注:执行过程中可能会出现如下错误

Warning: /home/hadoop/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.

并不会影响执行结果,可在sqoop/bin目录下的configure-sqoop文件中注释相应部分报错就会消失
通过Sqoop连接MySQL数据库

【大数据基础】VirtualBox安装CentOS实操

首先下载VirtualBox并安装,可在官网根据所使用的系统直接下载:https://www.virtualbox.org/wiki/Downloads。VirtualBox和一般的软件安装并没有什么差别,这里略过不提。

注:本文中使用Mac OS X系统进行操作,但文中的方法也同样适用Windows系统

安装完后打开VirtualBox,点击New添加虚拟机

VirtualBox管理界面

在弹出的窗口中填写名称方便查找并选择需安装的操作系统类型及版本,这里名称填入hadoop01,操作系统选择64位的Linux,完成点击Continue

主机名和操作系统配置

下一个页面为内存大小配置,此处用于配置所创建虚拟机所占用的内存大小,推荐大小为不小于512MB。可通过拖动滑块或直接输入来调整内存大小值,配置完成后点击Continue继续

VirtualBox虚拟机内存大小设置

下一个页面为硬盘配置页面,确定是否创建虚拟硬盘或使用已有的虚拟硬盘,我们选择Create a virtual hard disk now,点击Create进入下一步

VirtualBox配置硬盘

下一个页面选择创建的虚拟硬盘类型,默认为VDI,据说VMDK可跨平台在VMware中导入,这里我们选择VMDK格式,点击Continue进入下一步

VirtualBox选择虚拟硬盘类型

下一个页面用于如何为虚拟磁盘分配电脑的硬盘的资源,一般建议使用动态分配,这样不会占用过多的硬盘资源。点击Continue进入下一步

虚拟磁盘在电脑上的资源分配

此处选择虚拟磁盘保存位置以及可使用的硬盘资源大小。点击Create进入下一步完成VirtualBox上虚拟磁盘的配置

选择保存位置和大小

此时在VirtualBox主界面左侧就会出现刚刚创建的hadoop01,选中该虚拟机,点击Start

hadoop01虚拟机

进入的下一个页面需选择所下载CentOS的iso文件(可根据实际情况在以下地址中选择镜像下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/),点击Start开启操作系统的安装流程

CentOS操作系统文件选择

接下来进入的是CentOS安装的欢迎界面,选择Install or upgrade an existing system并按下Enter/Return键

CentOS安装欢迎界面

下一个页面为设备检测,可使用Tab键切换到Skip并按下Enter/Return键跳过该步骤

CentOS安装Media Test

紧接着进入欢迎页面和安装向导中使用的语言,选择后点击Next或直接按下Enter/Return键进入下一步(注:如果点击后发现鼠标无法退出虚拟机界面,按下左侧的Command键即可)

CentOS欢迎界面

安装界面语言选择

接下来的页面选择存储设备,一般选择默认的Basic Storage Devices,点击Next或直接按下Enter/Return键进入下一步

存储设备选择

接下来警告是否保存原虚拟磁盘的数据,由于我们是初次安装,可以选择Yes, discard any data,点击按钮或直接按下Enter/Return键进入下一步

是否保留原数据警告

接下来进入主机名和网络配置页面,主机名是指在局域网中显示的名称,这里我们使用hadoop01。在该页面点击Configure Network还可以进行网络配置,为便于对配置文件的了解我们将在安装完成后进行相关配置,点击Next按钮进入下一步

主机名和网络配置

紧接着进入的是时区配置页面,可根据需求进行选择或保持默认,这里我们选择北京时间Asia/Shanghai,点击Next按钮进入下一步

时区配置页面

接下来进入root用户的密码的设置页面,root用户在Linux中拥有最高权限,这个密码相当重要,务必记牢,点击Next按钮进入下一步

Root密码设置页面

下一个页面选择安装类型,我们采用默认的Replace Existing Linux System(s),点击Next或直接按下Enter/Return键进入下一步

覆盖当前Linux系统

此时会弹出一个窗口确认是否写入(Write changes to disk),点击Next或直接按下Enter/Return键进入下一步

确认写入磁盘

紧接着进入到安装进度页面

CentOS安装进程

安装完成进入如下页面,点击Reboot进行重启

CentOS安装重启页面

然后进入的是命令行页面,输入用户名(root)和密码完成登录

CentOS命令行登录页面

此时在主界面中点击Settings>Network,然后配置网卡适配器为Bridged Adapter,如无需上网,可选择Host-only Adapter,Alan使用的是Mac采用无线上网,这里选择en0: Wi-Fi(Airport)

VirtualBox下安装CentOS网络设置
在命令行界面输入vi /etc/sysconfig/network-scripts/ifcfg-eth0进行编辑,主要修改和配置的内容如下:


	BOOTPROTO="static" #动态获取IP值使用dhcp
	ONBOOT="yes"
	IPADDR="192.168.1.110" #根据实际网段和所需配置IP为定
	NETMASK="255.255.255.0" 
	GATEWAY="192.168.1.1" #根据实际网段而定
	DNS1=8.8.8.8 #DNS可不进行配置
	DNS2=8.8.4.4

vi /etc/hosts配置机名和IP映射

192.168.1.110  hadoop01

修改完成后输入service network restart更改生效

很多时候直接在虚拟机上操作不太方便,Mac上可使用Terminal进行连接,Windows上则可使用SecureCRT等工具进行连接。以Terminal为例,直接输入ssh root@192.168.1.110,第一登录需输入入yes添加为安全主机,然后输入root密码即可完成登录:

通过Terminal连接虚拟主机

其它相关文件:

/etc/sysconfig/network配置主机名

/etc/resolv.conf配置域名解析服务器地址

常见问题

Device eth0 does not seem to be present…报错

这种报错常见于在VirtualBox或VMware上克隆虚拟机时,在配置完成后输入service network restart重启时所出现的网络错误,解决的方法是打开/etc/udev/rules.d/70-persistent-net.rules文件,找到如下内容,记下eth1的MAC地址(本例中为08:00:27:19:10:77)

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:19:10:77", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

然后再打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件编辑,设置HWADDR后的值为刚刚记录下的MAC地址,并设置DEVICE=eth1再重启网络即可

Hadoop学习笔记

第一步:安装Linux

第二步:安装JDK

javac查是否安装配置好了JDK,若未安装,以JAVA 7为例:

#Centos
yum install java-1.7.0-openjdk-devel
#Ubuntu
apt-get install openjdk-7-jdk -y

再次输入javac若出现类似下面的提示则表明安装成功

Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are used
  -classpath <path>          Specify where to find user class files and annotation processors
  -cp <path>                 Specify where to find user class files and annotation processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compilation is done.
  -processor <class1>[,<class2>,<class3>...] Names of the annotation processors to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>             Specify where to place generated class files
  -s <directory>             Specify where to place generated source files
  -implicit:{none,class}     Specify whether or not to generate class files for implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>          Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system
  -Werror                    Terminate compilation if warnings occur
  @<filename>                Read options and filenames from file

要在整个系统中使用JDK,还需要配置环境变量,首先打开/etc/profile下

#centos
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64/
#ubuntu
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JER_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/BIN:$JRE_HOME/bin:$PATH

通过source /etc/pofile设置生效

第三步:配置Hadoop

首先需要下载Hadoop安装包,以1.2.1版本为例,比如:

wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
mv hadoop-1.2.1.tar.gz /opt/
cd /opt/
tar -xzvf hadoop-1.2.1.tar.gz
cd hadoop-1.2.1/conf/
nano hadoop-env.sh
#找到 # export JAVA_HOME=/usr/lib/j2sdk1.5-sun,去除注释交将JAVA_HOME修改为
/usr/lib/jvm/java-1.7.0-openjdk.x86_64/
nano core-site.xml
#在configuration标签内添加
<property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop</value>
</property>
<property>
    <name>dfs.name.dir</name>
    <value>/hadoop/name</value>
</property>
<property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
</property>
nano hdfs-site.xml
<property>
    <name>dfs.data.dir</name>
    <value>/hadoop/data</value>
</property>
nano mapred-site.xml
<property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
</property>
nano /etc/profile
添加export HADOOP_HOME=/opt/hadoop-1.2.1
PATH内添加一条$HADOOP_HOME/bin
source /etc/profile
cd ..
hadoop namenode -format

些时在命令窗口输入hadoop来检查配置是否成功