Linux、Hadoop安装笔记
目录
最近因为 Hadoop 需要在 Linux 的环境下,因此也在自己的电脑上通过 Parallels Desktop 安装了两个免费的 Linux 操作系统,一个是 CentOS 6.7,还有一个是 Ubuntu 14.04.3。
因为网站所用的服务器系统是 CentOS,所以就先用 CentOS,但是因为装不上 tools 就放弃了。转向 Ubuntu,虽然都是一样的 - -
安装完系统之后没有安装任何的组件。首先就是一个 root 密码的问题,默认安装的时候是需要输入一个用户名和密码,但并没有设置 root 的密码。
关于 root 的密码问题
设置 root 密码步骤
一、默认 root 密码是随机的,即每次开机都有一个新的 root 密码。我们可以在终端输入命令 sudo passwd
,然后输入当前用户的密码。
二、终端会提示我们输入新的密码并确认,此时的密码就是 root 新密码。修改成功后,输入命令 su root
,再输入新的密码就 ok 了。
三、分析没有默认的,因为你还没给 root 设置密码,第一个 user 是在 admin 组,所以他可以给 root 设置密码。
sudo passwd root
[sudo] password for you:---> 输入你的密码,不会显示
Enter new UNIX password: # 设置 root 密码
Retype new UNIX password: # 重复密码
# 用安装时建立的用户登陆后在 Shell 执行
sudo passwd root
Password: # 输入刚建立的用户密码
Enter new UNIX password: # 输入要设置的 root 密码
Retype new UNIX password: # 重复 root 密码
password updated successfully! # 密码更新成功
安装后可以到用户和组里面去改,随便改的。要在登录时用 root 的话,可以在"登录界面"里改,让管理员登录系统的选项就可以了。
Ubuntu 下中文英文的转换
安装的时候选择的语言是中文,但是因为中文的话,直接用虚拟机打开是中文以乱码形式显示,但是需要说明一点就是,如果通过 SSH 连接,中文就能够显示正常。不过为了在虚拟机直接打开就能够正常显示,有两种方式,一种是换为英文,还有一种就是安装 zhcon。
一、将环境变量由中文换为英文
修改 /etc/default/locale
:
sudo vim /etc/default/locale
修改默认的:
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
为:
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
存盘退出,然后:
sudo reboot
再然后 env
或者 locale
查看修改后的结果就可以了…
二、安装 zhcon
终端或者命令行里输入:
sudo apt-get install zhcon
等安装完即可~
运行的时候记得要加载 vgz 驱动和 utf8 支持,否则会黑屏,并且只能在纯命令行里运行,在终端运行会出错。
所以你的命令应该是:
zhcon --utf8 --drv=vga
如果嫌每次都要输入这么多太麻烦可以在 ~/.bashrc
里面加一个别名:
sudo vim ~/.bashrc
打开后在里面加入一行:
alias zhcon='zhcon --utf8 --drv=vga'
保存退出,这样每次进入命令行后直接运行 zhcon 即可,不用担心黑屏问题。
zhcon 中支持中文显示也支持中文输入法,由于热键冲突问题暂时我只知道 Ctrl+space 切换到全拼输入法是可以用的,多多少少解决了点中文目录/文件名的问题了。
其实关于这个问题,我最终是将环境变量设置为中文,通过 ssh 去连接虚拟机,就没有问题了。
Ubuntu 下 SSH 设置
安装 OpenSSH Server
默认情况下因为没有安装任何组件,因此首先要安装开启 ssh-server 服务。
Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条:
sudo apt-get install openssh-server
查看返回的结果,如果没有出错,则用 putty、SecureCRT、SSH Secure Shell Client 等 SSH 客户端软件,输入您服务器的 IP 地址。如果一切正常的话,等一会儿就可以连接上了。并且使用现有的用户名和密码应该就可以登录了。
检查 SSH 服务状态
然后确认 sshserver 是否启动了:(或用 netstat -tlp
命令)
ps -e | grep ssh
如果只有 ssh-agent 那 ssh-server 还没有启动,需要 /etc/init.d/ssh start
,如果看到 sshd 那说明 ssh-server 已经启动了。
配置 SSH 服务
ssh-server 配置文件位于 /etc/ssh/sshd_config
,在这里可以定义 SSH 的服务端口,默认端口是 22,你可以自己定义成其他端口号,如 222。然后重启 SSH 服务:
sudo /etc/init.d/ssh restart
优化 SSH 登录速度
事实上如果没什么特别需求,到这里 OpenSSH Server 就算安装好了。但是进一步设置一下,可以让 OpenSSH 登录时间更短,并且更加安全。这一切都是通过修改 openssh 的配置文件 sshd_config
实现的。
首先,您刚才实验远程登录的时候可能会发现,在输入完用户名后需要等很长一段时间才会提示输入密码。其实这是由于 sshd 需要反查客户端的 dns 信息导致的。我们可以通过禁用这个特性来大幅提高登录的速度。首先,打开 sshd_config 文件:
sudo nano /etc/ssh/sshd_config
找到 GSSAPI options 这一节,将下面两行注释掉:
#GSSAPIAuthentication yes
#GSSAPIDelegateCredentials no
然后重新启动 ssh 服务即可:
sudo /etc/init.d/ssh restart
再登录试试,应该非常快了吧。
利用 Putty 通过证书认证登录服务器
SSH 服务中,所有的内容都是加密传输的,安全性基本有保证。但是如果能使用证书认证的话,安全性将会更上一层楼,而且经过一定的设置,还能实现证书认证自动登录的效果。
服务器端配置
首先修改 sshd_config 文件,开启证书认证选项:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
修改完成后重新启动 ssh 服务。
生成 SSH 密钥
下一步我们需要为 SSH 用户建立私钥和公钥。首先要登录到需要建立密钥的账户下,这里注意退出 root 用户,需要的话用 su 命令切换到其它用户下。然后运行:
ssh-keygen
这里,我们将生成的 key 存放在默认目录下即可。建立的过程中会提示输入 passphrase,这相当于给证书加个密码,也是提高安全性的措施,这样即使证书不小心被人拷走也不怕了。
当然如果这个留空的话,后面即可实现 Putty 通过证书认证的自动登录。
ssh-keygen 命令会生成两个密钥,首先我们需要将公钥改名留在服务器上:
cd ~/.ssh
mv id_rsa.pub authorized_keys
然后将私钥 id_rsa 从服务器上复制出来,并删除掉服务器上的 id_rsa 文件。
客户端配置
服务器上的设置就做完了,下面的步骤需要在客户端电脑上来做。首先,我们需要将 id_rsa 文件转化为 PuTTy 支持的格式。这里我们需要利用 PuTTyGEN 这个工具:
点击 PuTTyGen 界面中的 Load 按钮,选择 id_rsa 文件,输入 passphrase(如果有的话),然后再点击 Save PrivateKey 按钮,这样 PuTTy 接受的私钥就做好了。
打开 PuTTy,在 Session 中输入服务器的 IP 地址,在 Connection->SSH->Auth 下点击 Browse 按钮,选择刚才生成好的私钥。然后回到 Connection 选项,在 Auto-login username 中输入证书所属的用户名。回到 Session 选项卡,输入个名字点 Save 保存下这个 Session。点击底部的 Open 应该就可以通过证书认证登录到服务器了。如果有 passphrase 的话,登录过程中会要求输入 passphrase,否则将会直接登录到服务器上,非常的方便。
文件传输配置
在 Windows 机上用 Ubuntu ssh 远程登录 Ubuntu 机下载 PuTTY。
如何在 Windows 机上拷贝文件/文件夹从/到远程 Ubuntu 机下载 FileZilla。
Filezilla 连接 SFTP 使用 ssh key 认证:
由于 Filezilla 使用 putty 连接 sftp server。所以如果要在 Filezilla 使用 ssh key 的话,请在 putty 的 default settings->ssh->Auth 中,加上你的 private key。保存就可以。
如果你生成的 ssh key 有 Passphrase,请将 Passphrase 添在 Filezilla 的 password 输入框,保存就可以使用。
Ubuntu 下允许 root 用户 ssh 远程登录
SSH 服务器,可以通过 SSH 协议来访问远程服务器,代替 telnet 和 ftp。但是 ubuntu 默认是不启用 root 用户也不允许 root 远程登录的。所以需要先启用 root 用户。
启用 root 用户:
sudo passwd root # 修改密码后就启用了
对 openssh server 进行配置:
sudo vim /etc/ssh/sshd_config
找到 PermitRootLogin no
一行,改为:
PermitRootLogin yes
重启 openssh server:
sudo service ssh restart
Ubuntu 下配置 JDK
使用 root 用户登录服务器,输入 javac
判断是否有 java 开发环境。
如果没有,使用:
apt-get install openjdk-7-jdk
安装完成之后,设置环境变量:
vim /etc/profile
在 if [ "$PS1" ]; then
上方即这个文件的开始处设置环境变量(假定 java 安装在了 /usr/lib/jvm/java-7-openjdk-amd64
):
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
然后保存退出(esc 后输入 :wq
),然后让它生效:
source /etc/profile
到此为止,JDK 就安装完成,在任何目录下输入 javac
就可以得到相关提示。
Ubuntu 下配置 Hadoop
下载 Hadoop
首先是下载 Hadoop,使用 wget 命令下载安装包,我们这里举例下载 hadoop 1.2.1:
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
直接输入 ls
就可以看到下载好的压缩包。首先,将这个压缩包换一个目录:
mv hadoop-1.2.1.tar.gz /opt/
这个目录是将 hadoop 这个压缩包移动到 /opt
文件夹下,我们进入 opt 文件夹下,进行解压缩。
tar -zxvf hadoop-1.2.1.tar.gz
配置 Hadoop
然后再 opt 文件夹下就多了 hadoop-1.2.1 文件夹,我们进入这个文件可以看到这里面的文件结构,我们要配置的文件主要在这里面的 conf 文件夹下。
因此进入 conf 文件夹:
cd /opt/hadoop-1.2.1/conf
这里面我们需要配置四个文件,分别是:mapred-site.xml
、core-site.xml
、hdfs-site.xml
、hadoop-env.sh
修改 hadoop-env.sh
vim hadoop-env.sh
更新如下设置:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
修改 core-site.xml
增加以下配置:
<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://主机名:9000</value>
</property>
修改 hdfs-site.xml
增加以下配置:
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
</property>
修改 mapred-site.xml
增加以下配置:
<property>
<name>mapred.job.tracker</name>
<value>主机名:9001</value>
</property>
配置环境变量
最终还需要配置下 hadoop 的环境变量:
vim /etc/profile
在 JRE_HOME 下面添加:
export HADOOP_HOME=/opt/hadoop-1.2.1
更新 PATH 变量:
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
保存退出,再让环境变量生效,输入:
source /etc/profile
启动 Hadoop
在执行 hadoop 之前呢,先对 namenode 进行格式化操作:
在 /opt/hadoop-1.2.1/bin
目录下面执行:
hadoop namenode -format
执行完成之后,进入 /opt/hadoop-1.2.1/bin
,输入:
start-all.sh
执行 hadoop 启动命令,启动的时候会要求输入 ssh 的 root 密码。
执行完成之后,输入 jps
(查看当前运行的 java 进程)看现在的进程是否包含以下 java 进程:
JobTracker、Jps、DataNode、TaskTracker、NameNode、SecondaryNameNode
如果包含以上进程,说明 hadoop 安装完成。
可以通过命令 hadoop fs -ls /
看看 hadoop 下面有哪些文件。
通过关闭 UseDNS 和 GSSAPIAuthentication 选项加速 SSH 登录
通常情况下我们在连接 OpenSSH 服务器的时候假如 UseDNS 选项是打开的话,服务器会先根据客户端的 IP 地址进行 DNS PTR 反向查询出客户端的主机名,然后根据查询出的客户端主机名进行 DNS 正向 A 记录查询,并验证是否与原始 IP 地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP 不会有 PTR 记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。
服务端步骤如下:
编辑配置文件 /etc/ssh/sshd_config
:
vim /etc/ssh/sshd_config
找到 UseDNS 选项,如果没有注释,将其注释:
#UseDNS yes
添加:
UseDNS no
找到 GSSAPIAuthentication 选项,如果没有注释,将其注释:
#GSSAPIAuthentication yes
添加:
GSSAPIAuthentication no
保存配置文件,重启 OpenSSH 服务器:
/etc/init.d/sshd restart
更改 MySQL 用户密码
方法一:
(适用于管理员或者有全局权限的用户重设其它用户的密码)
进入命令行模式:
mysql -u root -p
mysql> use mysql;
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='username';
mysql> FLUSH PRIVILEGES;
mysql> quit;
方法二:
mysql -u root -p
mysql> use mysql;
mysql> SET PASSWORD FOR username=PASSWORD('new password');
mysql> QUIT
方法三:
mysqladmin -u root "old password" "new password"
注:new password 请输入你想要设置的密码。
遇到的错误
[hadoop@Master hbase-1.1.2]$ hive
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
解决办法:
/usr/share/hadoop/etc/hadoop/hadoop-env.sh
里面被增加了 HADOOP_CLASSPATH
。
设置如下:
export HADOOP_CLASSPATH=$HBASE_HOME/hbase/hbase-0.20.3.jar:$HABSE_HOME/hbase-config:$ZOOKEEPER/zookeeper-3.2.2.jar
将其修改为:
export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin
通过以上完整的配置指南,您可以在 Ubuntu 系统上成功配置 Hadoop 环境并进行相关开发工作。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。