一、准备

1.1创建一个实验用户,如hadoop(!!!!也可以采用已有的mysql用户,这样就不需要再创建了,给mysql用户做相应管理员权限赋权就可以了, 后续需要用到用户名hadoop的时候,使用mysql)

sudo useradd -m hadoop -s /bin/bash     #创建hadoop用户,并使用/bin/bash作为shell
sudo passwd hadoop                   #为hadoop用户设置密码,之后需要连续输入两次密码
sudo adduser hadoop sudo             #为hadoop用户增加管理员权限
su - hadoop                          #切换当前用户为用户hadoop
sudo apt-get update                  #更新hadoop用户的apt,方便后面的安装

(19.3.22)

1.2安装SSH,设置SSH无密码登陆

sudo apt-get install openssh-server   #安装SSH server
ssh localhost                         #登陆SSH,第一次登陆输入yes
exit                                  #退出登录的ssh localhost
 
cd ~/.ssh/                            #如果没法进入该目录,执行一次ssh localhost
ssh-keygen -t rsa

连续敲击三次回车

其中,第一次回车是让KEY存于默认位置,以方便后续的命令输入。第二次和第三次是确定passphrase,相关性不大。之后再输入:

$ cat ./id_rsa.pub >> ./authorized_keys     #加入授权
$ ssh localhost                         #此时已不需密码即可登录localhost,并可见下图。

如果失败则可以搜索SSH免密码登录来寻求答案

二、安装jdk1.8

首先在oracle官网下载jdk1.8

http://www.oracle.com/technetwork/java/javase/downloads/index.htmlhttps://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

接下来进行安装与环境变量配置,根据个人电脑系统选择对应版本,如 jdk-8u201-linux-x64.tar.gz

mkdir /usr/lib/jvm                              #创建jvm文件夹
sudo tar -zxvf  jdk-8u201-linux-x64.tar.gz  -C /usr/lib/jvm  #/ 解压到/usr/lib/jvm目录下
cd /usr/lib/jvm                                 #进入该目录
mv  jdk1.8.0_201 java                         #重命名为java
vi ~/.bashrc                                 #给JDK配置环境变量

注:其中如果权限不够,无法在相关目录下创建jvm文件夹,那么可以使用 $ sudo -i 语句进入root账户来创建文件夹。

另外推荐使用vim来编辑环境变量,即最后一句使用指令

vim ~/.bashrc 
# 如果没有vim,可以使用:

sudo apt-get install vim
# 来进行下载。

在.bashrc文件添加如下指令:

export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH

在文件修改完毕保存以后,在终端输入指令:

$ source ~/.bashrc                       #使新配置的环境变量生效
$ java -version                          #检测是否安装成功,查看java版本

如果出现如下图所示的内容,即为安装成功

三、安装hadoop-3.1.2

先下载hadoop-3.1.2.tar.gz,链接如下:

http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz

下面进行安装:

sudo tar -zxvf  hadoop-3.1.2.tar.gz  -C  /usr/local    #解压到/usr/local目录下
cd /usr/local
sudo mv  hadoop-3.1.2    hadoop                     #重命名为hadoop
sudo chown -R hadoop ./hadoop         #修改文件权限,根据实际情况确定用户名

给hadoop配置环境变量,将下面代码添加到.bashrc文件:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

同样,执行source ~/.bashrc使设置生效,并查看hadoop是否安装成功

source ~/.bashrc
hadoop version

正确显示版本即成功。

伪分布式配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。首先将jdk1.8的路径添(export JAVA_HOME=/usr/lib/jvm/java )加到hadoop-env.sh文件

cd /usr/local/hadoop/etc/hadoop/
sudo vim hadoop-env.sh

接下来修改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

<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>

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(可参考官方教程),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

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

cd /usr/local/hadoop/
 ./bin/hdfs namenode –format

启动namenode和datanode进程,并查看启动结果

./sbin/start-dfs.sh
jps

启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”

hadoop账户 怎么用hadoop用户登录_java


此时也有可能出现要求输入localhost密码的情况 ,如果此时明明输入的是正确的密码却仍无法登入,其原因是由于如果不输入用户名的时候默认的是root用户,但是ssh服务默认没有开root用户的ssh权限

输入指令:

vim /etc/ssh/sshd_config

检查PermitRootLogin 后面是否为yes,如果不是,则将该行代码 中PermitRootLogin 后面的内容删除,改为yes,保存。之后输入下列代码重启SSH服务:

/etc/init.d/sshd restart

即可正常登入(免密码登录参考前文)

成功启动后,如果是在桌面版linux上安装的,也可以访问 Web 界面 http://localhost:9870(老版本为50070) 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。 (如果是在服务器版linux上安装的hadoop, 为了进行浏览器访问,需要配置一个桌面版的虚拟机来进行,输入用IP地址代替localhost)

注意1: 也可能WEB访问不成功, 可上网寻找解决办法。
注意2:DFS文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.namenode.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录clusterID,标识了所格式化的 namenode的版本。如果频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的 id 不一致。可能导致datanode无法启动。

hadoop账户 怎么用hadoop用户登录_bash_02

可以运行一个例子,步骤如下:
创建执行MapReduce作业所需的 DFS 目录:

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/<username>     //<username> 问用户名,如hadoop

拷贝输入文件到分布式文件系统:

bin/hdfs dfs  -put  etc/hadoop  input

可以运行一些例子:

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

查看输出的文件(files): 从分布式文件系统中拷贝文件到本地文件系统并查看:

bin/hdfs dfs -get output output
cat output/*

或者直接在分布式文件系统上查看:

bin/hdfs dfs -cat output/*
YARN 单机配置

通过设置几个参数并运行ResourceManager daemon and NodeManager daemon,你可以在YARN上以伪分布模式运行MapReduce job。

配置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>

启动ResourceManager daemon 和 NodeManager daemon:

sbin/start-yarn.sh

如果是在桌面版linux上安装的, 可以用浏览器打开资源管理器端口,默认为:

ResourceManager - http://localhost:8088/
(如果是在服务器版linux上安装的hadoop, 为了进行浏览器访问,需要配置一个桌面版的虚拟机来进行,输入用IP地址代替localhost)

hadoop账户 怎么用hadoop用户登录_hadoop账户_03

可以通过下列命令停止hadoop和YARN

sbin/stop-dfs.sh
sbin/stop-yarn.sh

四 安装Hbase和简单使用

解压安装包hbase-1.2.11-bin.tar.gz至路径 /usr/local,命令如下:

sudo tar -zxvf  hbase-1.2.11-bin.tar.gz -C /usr/local

将解压的文件名hbase-1.2.11改为hbase,以方便使用,命令如下:

sudo mv /usr/local/hbase-1.2.11  /usr/local/hbase
cd /usr/local
sudo chown -R hadoop ./hbase 
#将hbase下的所有文件的所有者改为hadoop,hadoop是当前用户的用户名。
配置环境变量

给hbase配置环境变量,将下面代码添加到.bashrc文件:

export PATH=$PATH:/usr/local/hbase/bin
vim ~/.bashrc

执行source ~/.bashrc使设置生效,并查看hbase是否安装成功

/usr/local/hbase/bin/hbase version

(如果发生jar包冲突,可以移除。2.1.4版本会发生下图错误,暂时不使用)

hadoop账户 怎么用hadoop用户登录_java_04

HBase配置

单机配置(可能需要配置JAVA_HOME环境变量, 由于本实验指南在HADOOP安装时已配置,故省略)

配置/usr/local/hbase/conf/hbase-site.xml如下

hadoop账户 怎么用hadoop用户登录_hadoop_05


采用如下命令启动服务、查看进程和启动客户端

cd /usr/local/hbase
bin/start-hbase.sh
jps
bin/hbase shell

hadoop账户 怎么用hadoop用户登录_hadoop账户_06


下面为配置伪分布模式的指南,配置分布模式方法请查阅官方文档

配置hbase-env.sh

hadoop账户 怎么用hadoop用户登录_hadoop账户_07

start-dfs.sh
cd /usr/local/hbase/bin
start-hbase-sh

hadoop账户 怎么用hadoop用户登录_java_08

查看DFS中Hbase 目录,自动创建

hadoop账户 怎么用hadoop用户登录_bash_09


Start a backup HBase Master (HMaster) server.(仅仅为了测试和学习,生产环境不会在一台机器上启动备份master)

HMaster服务器控制 HBase集群. 你可以启动最多9个后备HMaster。

用 localmaster-backup.sh启动. 为每个后背HMaster加一个16000端口之上的偏移量。 启动后可以查看结果。

hadoop账户 怎么用hadoop用户登录_bash_10


启动和停止附加区域服务器RegionServers,命令示例和结果如下图。

hadoop账户 怎么用hadoop用户登录_java_11

进入交互界面

hbase shell

进行一些基本数据库操作

创建表

使用create命令创建一个新表.你必须规定表名和列族名

hadoop账户 怎么用hadoop用户登录_bash_12


显示表信息

使用list 命令可以显示表信息

hadoop账户 怎么用hadoop用户登录_java_13


使用 describe 命令显示表的详细信息

hadoop账户 怎么用hadoop用户登录_hadoop账户_14


向表中加入数据.

使用 put 命令

hadoop账户 怎么用hadoop用户登录_bash_15


扫描表.

使用scan 命令扫描整个表取得数据 。

hadoop账户 怎么用hadoop用户登录_bash_16


取一行数据,使用get指令.

hadoop账户 怎么用hadoop用户登录_bash_17


修改表模式,使用alter命令,如修改存储版本数

hbase(main):007:0>disable ’test’ 
hbase(main):007:0>alter ’test’, NAME=>’cf’,VERSIONS=>5
hbase(main):007:0>enable ’test’

其他命令 disable table, drop table,enable table 等。

思考题:

1 请问伪分布和分布式的含义有何不同?就本实验,你是如何理解在一台计算机上做到“伪分布”的?

2 在1.2小节进行安装SSH并设置SSH无密码登陆,请问这个安装的目的是什么?

3 如果继续向Hbase的test表中put行键为”row1”,值为其它字符串的数据,put ‘test’ ,’row1’, ‘cf:a’, ‘value6’,会发生什么?如果采用语句get ‘test’, ‘row1’, {COLUMN=>’cf:a’, VERSIONS=>3} 进行查询,分析你得到的结果。put与关系数据库的插入有何不同?

附录1

Hadoop出现错误:

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

解决方案:
在文件hadoop-env.sh中增加:

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"