1.环境信息
elementary 14.04
Java 1.8.0_151(/apps/jdk1.8.0_151)
Hadoop 2.6.5(/apps/hadoop)
用户名bigdata、密码123、主机名hadoop
2.创建bigdata用户
# 创建名为bigdata的用户
$ sudo useradd -m bigdata
# 用如下指令设置密码,按提示输入两次密码,设置为123
$ sudo passwd bigdata
# 为bigdata用户增加管理员权限,方便部署
$ sudo adduser bigdata sudo
或
$ sudo usermod -G sudo bigdata
最后注销当前用户(右上角齿轮,选择注销),返回登录界面,选择bigdata用户进行登录
后续操作都在bigdata用户下进行
刚切换到bigdata用户里终端无法输入,
查资料后发现是因为 useradd 后默认使用的是 sh 而不是 bash shell,所以解决的方法如下:
在原管理员账户终端使用命令:
chsh -s /bin/bash bigdata
重新登录bigdata用户,发现终端可以输入
(在之前尝试右键终端打开root tab,发现可以输入,但无法用tab补全)
一劳永逸的方法:
另外,如果是突然tab无法使用了,还可能是因为补全功能没启动,可以编辑文件 /etc/bash.bashrc
把bash completion相关字段改为以下:
3.更新apt
# 更新apt,方便后续使用apt安装软件
$ sudo apt-get update
# 安装gedit,方便文档编辑(同vi)
$ sudo apt-get install gedit
4.安装SSH、配置SSH免密码登录
集群、单机模式都需要SSH登陆(类似于远程登录,可以登陆某台主机,并在上面运行命令)
Ubuntu默认安装了SSH client,还需安装SSH server
# 用apt-get的方式安装SSH server
$ sudo apt-get install openssh-server
安装后,可使用如下命令登陆本机
$ ssh localhost
此时会有登陆提示(初次登陆提示),输入yes,然后按提示输入用户密码123,就能登录到本机
但这样登陆需要密码,配置成SSH无密码比较方便
$ exit # 退出刚才的ssh localhost
$ cd ~/.ssh/ # 若没有该目录,先执行一次ssh localhost
$ ssh-keygen -t rsa # 会有提示,都按回车就可以
$ cat ./id_rsa.pub >> ./authorized_keys # 加入授权
此时再用ssh localhost命令,就无需密码直接可以登陆了
5.安装Java环境
这里不使用apt-get,改用jar包安装指定版本的Java
# 在根目录创建apps和data两个文件夹,apps存放安装的框架,data存放临时数据、程序代码等
$ sudo mkdir /apps
$ sudo mkdir /data
在这里发现命令行输入 ls 可见的文件在可视化文件中找不到,可以通过Ctrl+h找到
# Java和Hadoop的jar包都放在~/Downloads目录下
# 将Java安装包解压到/apps目录下
$ sudo tar -zxf ~/Downloads/jdk-8u151-linux-x64.tar.gz -C /apps/
其中,tar -zxf对文件进行解压缩 v为查看解压缩过程,-C制定解压后,将文件放到/apps目录下
配置Java相关环境
# 编辑配置文件/etc/profile,在文件末尾增加Java的环境变量
$ sudo gedit /etc/profile
# 将以下内容粘贴到环境变量文件的末尾
# java
export JAVA_HOME=/apps/java
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 执行source命令让Java环境变量生效
$ source /etc/profile
此时Java环境配置完成,执行如下命令查看
$ java -version
$ echo $JAVA_HOME
6.安装Hadoop伪分布式环境
$ sudo tar -zxf ~/Downloads/hadoop-2.6.5.tar.gz -C /apps # 将hadoop解压到apps目录下
$ cd /apps # 切换到apps目录
$ sudo mv ./hadoop-2.6.5/ ./hadoop # 将文件夹改名为hadoop
$ sudo chown -R bigdata ./hadoop # 修改文件权限
hadoop解压后即可使用,输入如下命令查看是否可用,成功会显示版本信息
$ /apps/hadoop/bin/hadoop version
不知道发生了什么,过了半个月时间,早上又试了一次,突然变成了这样
也就是说,hadoop环境已经配置成功。
在搜索这个错误的过程中,还可能是如下错误:
在 Linux 系统中安装 JDK 环境,配置好环境变量后,输入 java、javac 或者 java -version 等时,都提示如下错误:
-bash: /usr/local/java/bin/java: No such file or directory
原因1:配置时jdk目录放到了最后边,而系统前边有叫java的文件,export PATH=$PATH:$JAVA_HOME/bin
相关方法:配置时export PATH=$JAVA_HOME:$PATH
原因2:在 64 位的 Linux 系统中安装了 32 位的 JDK 环境。
相关方法:sudo apt-get install libc6-i386 lib32gcc1 lib32z1 lib32stdc++6 ia32-libs
当然也可以下载一个 64 位的 JDK 安装也可解决
伪分布式下,当前机器既作为NameNode,也作为DataNode,同时,读取的是HDFS的文件
修改配置文件,配置文件位于/apps/hadoop/etc/hadoop中,伪分布式需要修改2个配置文件core-size.xml和hdfs-site.xml,配置文件为XML格式。
修改两个配置文件
# 修改第一个配置文件
$ sudo gedit /apps/hadoop/etc/hadoop/core-site.xml
# 将如下内容替换
hadoop.tmp.dir
file:/apps/hadoop/tmp
Abase for other temporary directories.
fs.defaultFS
hdfs://localhost:9000
# 修改第二个配置文件
$ sudo gedit /apps/hadoop/etc/hadoop/hdfs-site.xml
# 将如下内容替换
dfs.replication
1
dfs.namenode.name.dir
file:/apps/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:/apps/hadoop/tmp/dfs/data
除此之外,额外修改一个配置文件hadoop-env.sh,防止后面出现JAVA_HOME is not set的问题
$ sudo gedit /apps/hadoop/etc/hadoop/hadoop-env.sh
# 将export JAVA_HOME=${JAVA_HOME}替换为如下内容
export JAVA_HOME=/apps/jdk1.8.0_151
配置完成后,执行NameNode的格式化
$ /apps/hadoop/bin/hdfs namenode -format
发现路径有问题,再返回上一步,改为
export JAVA_HOME=/apps/java
成功的话,会看到“successfully formatted”和“Exitting with status 0”的提示,若为“Exitting with status 1”则为出错
我这里显示是这个样子的
然后启动进程(start-all.sh包含start-dfs.sh和start-yarn.sh),输入jps查看当前进程,如图所示即为伪分布式配置成功
$ /apps/hadoop/sbin/start-dfs.sh
$ jps
这样就OK啦