hadoop env.sh 在哪里配置 hadoop-env.sh行35未预期的符号

74503人阅读
云计算hadoop(24)
&&&&&& 通常,集群里的一台机器被指定为&NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves\
官方地址:()
1 先决条件
确保在你集群中的每个节点上都安装了所有软件:sun-JDK& ,ssh,Hadoop
JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
ssh&必须安装并且保证&sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
2&实验环境搭建
&& 2.1& 准备工作
&&&& 操作系统:Ubuntu
&&&& 部署:Vmvare
&&&& 在vmvare安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。
&&&& 说明:
&&& 保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信。
&&& 为了保证虚拟机的ip和主机的ip在同一个ip段,虚拟机连接设置为桥连。
&&&& 准备机器:一台master,若干台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
&&&& 10.64.56.76 node1(master)& &
&&&& 10.64.56.77 node2 (slave1)& &
&&&& 10.64.56.78 node3 (slave2)
&&&& 主机信息:&
10.64.56.76
NameNode、JobTracker
10.64.56.76
NameNode、JobTracker
10.64.56.77
DataNode、TaskTracker
10.64.56.78
DataNode、TaskTracker
为保证环境一致先安装好JDK和ssh:
2.2 安装JDK
$ sudo apt-get install sun-java6-jdk1.2.3&&& &
这个安装,java执行文件自动添加到/usr/bin/目录。
验证 shell命令 :java -version 看是否与你的版本号一致。
2.3下载、创建用户
$ useradd hadoop
$ cd& /home/hadoop
在所有的机器上都建立相同的目录,也可以就建立相同的用户,最好是以该用户的home路径来做hadoop的安装路径。
例如在所有的机器上的安装路径都是:/home/hadoop/hadoop-0.20.203,这个不需要mkdir,在/home/hadoop/下解压hadoop包的时候,会自动生成)
(当然可以安装/usr/local/目录下,例如/usr/local/hadoop-0.20.203/
& chown -R hadoop /usr/local/hadoop-0.20.203/
& chgrp -R hadoop& /usr/local/hadoop-0.20.203/
(最好不要使用root安装,因为不推荐各个机器之间使用root访问 )
2.4 安装ssh和配置
1) 安装:sudo apt-get install ssh
&&&& 这个安装完后,可以直接使用ssh命令 了。
&&&& 执行$ netstat& -nat&&& 查看22端口是否开启了。
&&&& 测试:ssh localhost。
&&&& 输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。
&& (这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是:/etc/ssh/sshd_config):&
&&& 注意:在所有机子都需要安装ssh。
2)& 配置:
在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。
以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。
( 说明:hadoop@hadoop~]$ssh-keygen& -t& rsa
这个命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/dbrg/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行.)
3) 首先设置namenode的ssh为无需密码的、自动登录。
切换到hadoop用户( 保证用户hadoop可以无需密码登录,因为我们后面安装的hadoop属主是hadoop用户。)
$ su hadoop
cd /home/hadoop
$ ssh-keygen -t rsa
然后一直按回车
完成后,在home跟目录下会产生隐藏文件夹.ssh
之后ls 查看文件
cp id_rsa.pub& authorized_keys
$ssh localhost
$ ssh node1 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第一次ssh会有提示信息:
The authenticity of host ‘node1 (10.64.56.76)’ can’t be established.
RSA key fingerprint is 03:e0:30:cb:6e:13:a8:70:c9:7e:cf:ff:33:2a:67:30.
Are you sure you want to continue connecting (yes/no)?
输入 yes 来继续。这会把该服务器添加到你的已知主机的列表中
发现链接成功,并且无需密码。
4 ) 复制authorized_keys到node2 和node3 上
为了保证node1可以无需密码自动登录到node2和node3,先在node2和node3上执行
$ su hadoop
cd /home/hadoop
$ ssh-keygen -t rsa
一路按回车.
然后回到node1,复制authorized_keys到node2 和node3
[hadoop@hadoop .ssh]$ scp authorized_keys&& node2:/home/hadoop/.ssh/
[hadoop@hadoop .ssh]$ scp authorized_keys&& node3:/home/hadoop/.ssh/
这里会提示输入密码,输入hadoop账号密码就可以了。
改动你的 authorized_keys 文件的许可权限
[hadoop@hadoop .ssh]$chmod 644 authorized_keys
测试:ssh node2或者ssh node3(第一次需要输入yes)。
如果不须要输入密码则配置成功,如果还须要请检查上面的配置能不能正确。
2.5 安装Hadoop
#切换为hadoop用户
下载安装包后,直接解压安装即可:
$ tar -zxvfhadoop-0.20.203.0rc1.tar.gz&
1 ) 安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常,集群里的所有机器的&&& &
&&&& HADOOP_HOME路径相同。
2 )& 如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-0.20.203整个文件夹拷贝到其他机器的相同位置即可。
3 )& 可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME 的不同修改其hadoop-env.sh 。
4)&& 为了方便,使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile 新增以下内容:
&&& export HADOOP_HOME=/home/hadoop/hadoop-0.20.203
&&& exportPATH=$PATH:$HADOOP_HOME/bin
&& 修改完毕后,执行source /etc/profile 来使其生效。&
6)配置conf/hadoop-env.sh文件
配置conf/hadoop-env.sh文件
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
这里修改为你的jdk的安装位置。
测试hadoop安装:
Bin/hadoop jar hadoop-0.20.2-examples.jarwordcount& conf/ & /tmp/out
3. 集群配置(所有节点相同)
3.1配置文件:conf/core-site.xml
&?xml version=&1.0&?&
&?xml-stylesheet type=&text/xsl&href=&configuration.xsl&?&
&configuration&
&property&
&&name&fs.default.name&/name&
& &value&hdfs://node1:49000&/value&
&/property&
&property&
& &name&hadoop.tmp.dir&/name&
&&value&/home/hadoop/hadoop_home/var&/value&
&/property&
&/configuration&
1)fs.default.name是NameNode的URI。hdfs://主机名:端口/
2)hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
3.2配置文件:conf/mapred-site.xml
&?xmlversion=&1.0&?&
&?xml-stylesheettype=&text/xsl& href=&configuration.xsl&?&
&configuration&
&property&
& &name&mapred.job.tracker&/name&
& &value&node1:49001&/value&
&/property&
&property&
& &name&mapred.local.dir&/name&
&&value&/home/hadoop/hadoop_home/var&/value&
&/property&
&/configuration&
1)mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。
3.3配置文件:conf/hdfs-site.xml
&?xmlversion=&1.0&?&
&?xml-stylesheettype=&text/xsl& href=&configuration.xsl&?&
&configuration&
&property&
&name&dfs.name.dir&/name&
&value&/home/hadoop/name1, /home/hadoop/name2&/value& #hadoop的name目录路径
&description&& &/description&
&/property&
&property&
&name&dfs.data.dir&/name&
&value&/home/hadoop/data1, /home/hadoop/data2&/value&
&description& &/description&
&/property&
&property&
& &name&dfs.replication&/name&
& &!-- 我们的集群又两个结点,所以rep两份 --&
& &value&2&/vaue&
&/property&
&/configuration&
1)&& dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
2)&& dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
3.4配置masters和slaves主从结点
配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。
vi masters:
vi slaves:
配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh&
$&scp -r /home/hadoop/hadoop-0.20.203 root@node2: /home/hadoop/
4 hadoop启动
4.1 格式化一个新的分布式文件系统
先格式化一个新的分布式文件系统
$&cd hadoop-0.20.203
$&bin/hadoop namenode -format
成功情况下系统输出:
12/02/06 00:46:50 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:&& host = ubuntu/127.0.1.1
STARTUP_MSG:&& args = [-format]
STARTUP_MSG:&& version = 0.20.203.0
STARTUP_MSG:&& build =http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203-r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011
************************************************************/
12/02/ INFO namenode.FSNamesystem: fsOwner=root,root
12/02/06 00:46:50 INFO namenode.FSNamesystem:supergroup=supergroup
12/02/06 00:46:50 INFO namenode.FSNamesystem:isPermissionEnabled=true
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name1 has been successfully formatted.
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name2 has been successfully formatted.
12/02/06 00:46:50 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atv-jiwan-ubuntu-0/127.0.0.1
************************************************************/
查看输出保证分布式文件系统格式化成功
执行完后可以到master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
4.2 启动所有节点
启动方式1:
$&bin/start-all.sh (同时启动HDFS和Map/Reduce)
系统输出:
starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-ubuntu.out
node2: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node3: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node1: starting secondarynamenode,logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-ubuntu.out
starting jobtracker, logging to/usr/local/hadoop/logs/hadoop-hadoop-jobtracker-ubuntu.out
node2: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
node3: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
As you can see in slave's output above, it will automatically format it's storage directory(specified by dfs.data.dir) if it is not formattedalready. It will also create the directory if it does not exist yet.
执行完后可以到master(node1)和slave(node1,node2)机器上看到/home/hadoop/hadoopfs/data1和/home/hadoop/data2两个目录。
启动方式2:
启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh(单独启动HDFS集群)
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$bin/start-mapred.sh (单独启动Map/Reduce)
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
4.3 关闭所有节点
从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。
$&bin/stop-all.sh&
Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs).
${HADOOP_HOME}就是安装路径.
1)浏览NameNode和JobTracker的网络接口,它们的地址默认为:
NameNode - http://node1:50070/
JobTracker -
3)&& 使用netstat& –nat查看端口4是否正在使用。
4)& 使用jps查看进程
要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于 JVM 进程的ps 实用程序)。这个命令列出 5 个守护进程及其进程标识符。
5)将输入文件拷贝到分布式文件系统:
$ bin/hadoop fs -mkdir input
$ bin/hadoop fs -put conf/core-site.xml input
运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'
Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什么意思啊?
A: bin/hadoop jar(使用hadoop运行jar包) hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input output 'dfs[a-z.]+'
整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
Q: 什么是grep?
A: A map/reduce program that counts the matches of a regex in the input.
查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*
在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*
统计结果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs -cat output/part-00000
3&&&&&& dfs.class
2&&&&&& dfs.period
1&&&&&& dfs.file
1&&&&&&dfs.replication
1&&&&&& dfs.servers
1&&&&&& dfsadmin
7. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式
8.添加节点
可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf/master文件,加入 NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接
运行启动命令:
start-all.sh
然后可以通过node的主机名):50070查看新添加的DataNode
start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布
结束语:遇到问题时,先查看logs,很有帮助。
10 SHell自动安装脚本
#!/bin/bash
#validate user or group
validate() {
if [ 'id -u' == 0 ];then
echo &must not be root!&
echo &---------welcome to hadoop---------&
#hadoop install
hd-dir() {
if [ ! -d /home/hadoop/ ];then
mkdir /home/hadoop/
echo &download hadoop will begin&
download-hd() {
wget -c http://archive.apache.org/dist/hadoop/core/stable/hadoop-1.0.4.tar.gz -O /home/hadoop/hadoop-1.0.4.tar.gz
tar -xzvf /home/hadoop/hadoop-1.0.4.tar.gz -C /home/hadoop
rm /home/hadoop/hadoop-1.0.4.tar.gz
Ln -s /home/hadoop/hadoop-1.0.4 /home/hadoop/hadoop1.0.4
#hadoop conf
hd-conf() {
echo &export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386& && /home/hadoop/hadoop1.0.4/conf/hadoop-env.sh
echo &#set path jdk& && /home/hadoop/.profile
echo &export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386& && /home/hadoop/.profile
echo &#hadoop path& && /home/hadoop/.profile
echo &export HADOOP_HOME=/home/hadoop/hadoop1.0.4& && /home/hadoop/.profile
echo &PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin& && /home/hadoop/.profile
echo &HADOOP_HOME_WARN_SUPPRESS=1& && /home/hadoop/.profile
#hadoop core-site.xml
echo &&configuration&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&name&fs.default.name&/name&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&value&hdfs://hadoop-master:9000& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&name&hadoop.tmp.dir&/name&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&value&/home/hadoop/tmp&/value&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo &&/configuration&& && /home/hadoop/hadoop1.0.4/conf/core-site.xml
#hadoop hdfs-site.xml
echo &&configuration&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&name&dfs.name.dir&/name&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&value&/home/hadoop/name&/value&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&name&dfs.data.dir&/name&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&value&/home/hadoop/data&/value&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&name&dfs.replication&/name&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&value&1&/value&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo &&/configuration&& && /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
# hadoop mapred-site.xml
echo &&configuration&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo &&property&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo &&name&mapred.job.tracker&/name&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo &&value&hadoop-master:9001&/value&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo &&/property&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo &&/configuration&& && /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
#hadoop master
echo &hadoop-master& && /home/hadoop/hadoop1.0.4/conf/masters
#hadoop slaves
echo &hadoop-master& && /home/hadoop/hadoop1.0.4/conf/slaves
source /home/hadoop/.profile
hd-start() {
hadoop namenode -format
yes-or-no() {
echo &Is your name $* ?&
while true
echo -n &Enter yes or no: &
case &$x& in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo &Answer yes or no&;;
echo &Original params are $*&
if yes-or-no &$1&
echo &HI $1,nice name!&
download-hd
echo &Never mind!&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4104909次
积分:26221
积分:26221
排名:第149名
原创:216篇
评论:1231条
(4)(2)(4)(2)(1)(2)(1)(1)(2)(1)(1)(1)(1)(1)(2)(2)(1)(2)(3)(3)(3)(2)(2)(4)(3)(2)(15)(6)(8)(14)(29)(26)(27)(18)(7)(8)(6)(2)hadoop上提示/usr/local/hadoop/libexec/../conf/hadoop-env.sh: 行 1: $'\357\273\277#':
[问题点数:20分]
hadoop上提示/usr/local/hadoop/libexec/../conf/hadoop-env.sh: 行 1: $'\357\273\277#':
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。今天看啥 热点:
CDH5 hadoop-hive-habse单机版配置,hadoophivehbase
CDH5&hadoop-hive-habse单机版配置
一、安装环境:
OS:CentOS6.5&64位
JDK:jdk-7u72-linux-x64
hadoop:hadoop-2.3.0-cdh5.0.0.
hbase:hbase-0.96.1.1-cdh5.0.0.
hive:hive-0.12.0-cdh5.0.0.tar
我所用的都是基于CDH5.0.0的,使用CDH的发行版不会存在各个组件间不兼容,导致启动失败等异常。
CDH的其他版本可以在这里下载http://archive-/cdh5/cdh/5/
注意下载各个组件的时候其CDH的版本号一定都要相同。
文章中所有安装包和第三方jar包和配置文件都可以在这里下载到
/s/1pJDjHQN
二、基础准备
1.首先安装好linux系统,我这里的是:CentOS6.5,推荐为hadoop相关的操作再专门建立一个用户,因为root用户权限太大了
用root用户在shell下运行:
//创建一个叫hadoop的用户
&useradd&hadoop&&
//给hadoop设置密码
&passwd&hadoop
2.安装jdk,jdk就用root安装好了,linux下配置jdk的方式这里就不细说了,这里用rpm安装
&rpm&-ivh&&jdk-7u72-linux-x64.rpm&
然后配置jdk环境变量,我把我的/etc/profile文件贴出来
JAVA_HOME=/usr/java/jdk1.7.0_72
HIVE_HOME=/home/hadoop/hive-0.12.0-cdh5.0.0
HADOOP_HOME=/home/hadoop/hadoop-2.3.0-cdh5.0.0
PATH=$JAVA_HOME/bin:$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HIVE_HOME/lib
export&JAVA_HOME
export&HIVE_HOME
export&HADOOP_HOME
export&PATH
export&CLASSPATH
记得source一下
&source&/etc/profile
这里已经包括了后面要用到的hadoop和hive的安装目录,就用我们之前建立的hadoop用户安装hadoop、hbase、hive即可。所以它们都在/home/hadoop下。
三、安装hadoop
1.首先需要安装的是hadoop,先上传安装包再解压
用hadoop用户把hadoop、hbase、hive的tar.gz文件都上传到/home/hadoop下
2.解压hadoop-2.3.0-cdh5.0.0.tar.gz
&tar&&-xzvf&&./hadoop-2.3.0-cdh5.0.0.tar.gz
这样hadoop就被安装到了/home/hadoop/hadoop-2.3.0-cdh5.0.0目录下,如果刚才在/etc/profile里没有配置HADOOP_HOME就加进去,别忘了source。
3.下一步就是配置hadoop了
注意所有cmd后缀的文件都是windows下的配置文件,对应Linux下的是sh文件,另外hadoop生态系统中的所有组件的配置文件都遵循一个统一的规则,就是如果是xxx-default.xml则是全局的配置,xxx-site.xml则是个性化的配置,这两种文件里的配置要素完全一样,但是如果xxx-site.xml里存在配置,则会覆盖掉xxx-default.xml中同样标签内的配置,如果site.xml中没有,则会以default.xml中的配置为准。
hadoop的主要配置文件到在hadoop-2.3.0-cdh5.0.0/etc这个目录下,我们需要配置以下几个文件
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
这五个文件都在hadoop-2.3.0-cdh5.0.0/etc/hadoop这个目录下
配置hadoop-env.sh,27行,因为hadoop是java开发的,运行时需要jdk,根据自己的jdk路径,加上即可,别的没有了。
export&JAVA_HOME=/usr/java/jdk1.7.0_72&&
配置core-site.xml
&configuration&
&property&
&name&fs.default.name&/name&
&value&hdfs://localhost:8020&/value&
&/property&
&/configuration&
加上这一段即可,用来表明hdfs的访问地址,我没有修改hosts文件,所以这里就直接写localhost即可,端口可以自己定义,我这里用8020。
配置hdfs-site.xml
&&configuration&
&property&
&name&dfs.replication&/name&
&value&1&/value&
&/property&
&property&
&name&dfs.namenode.name.dir&/name&
&value&/home/hadoop/dfs/name&/value&
&/property&
&property&
&name&dfs.datanode.data.dir&/name&
&value&/home/hadoop/dfs/data&/value&
&/property&
&/configuration&
dfs.replication指定数据的副本数,这里是单机的,默认是3,我们改为1即可
dfs.namenode.name.dir指定namenode的路径
dfs.datanode.data.dir指定datanode的路径
这2个路径不用预先创建,后面格式化的时候会自动创建。
配置mapred-site.xml
&configuration&
&property&
&name&mapreduce.framework.name&/name&
&value&yarn&/value&
&/property&
&/configuration&
CDH5的版本是基于apache&hadoop2.0的,所以引入了yarn协助hadoop进行分布式计算。
把这一段复制进去就行了。
配置yarn-site.xml
&configuration&
&!--&Site&specific&YARN&configuration&properties&--&
&property&
&name&yarn.nodemanager.aux-services&/name&
&value&mapreduce_shuffle&/value&
&/property&
&/configuration&
把这一段复制进去就行。
4.格式化hdfs文件系统
第一次使用时在启动之前要进行格式化,之后就不用了,直接启动即可。一旦格式化,会删除hdfs上的所有数据,格式化的时候只需要针对namenode即可。
进入到hadoop-2.3.0-cdh5.0.0/bin目录下,执行
&./hadoop&namenode&-format
如果正确,可以看到之前配置的namenode的目录/home/hadoop/dfs/name被自动创建了出来。
5.启动hadoop
以上步骤都没有问题,就可以启动hadoop了,启动命令在hadoop-2.3.0-cdh5.0.0/sbin目录下,sbin目录下包含了所有hadoop各个部分的启动和停止命令,其中start-all和stop-all命令用于启动和停止所有相关部分。可以直接通过运行start-all来启动hadoop,但我推荐各个单独启动,如果有异常也方便定位哪部分出错,便于排查。
我们先运行一下jps目录看下java线程有哪些
在sbin目录下依次启动
启动namenode:&./hadoop-daemon.sh&start&namenode
如图,启动日志会生成在hadoop-2.3.0-cdh5.0.0/logs目录下,如果出错,可以查看日志排查。正确启动了以后,再用jps命令查看,会看到多了一个NameNode的进程。
启动datanode:&./hadoop-daemon.sh&start&datanode
如果,同样会看到生成的日志,用jps查看后多了一个DataNode进程。
此时,在linux上打开浏览器,访问http://localhost:50070或者在客户机上访问
http://linuxip:50070,可以看到web页面
如果不行请关闭linux防火墙等。
启动yarn:./start-yarn.sh&
因为我没有配置ssh免密码登录,所以启动的时候需要输入hadoop用户的密码,成功之后再用jps查看多了ResourceManager和NodeManager两个进程。
此时,在linux上打开浏览器,访问http://localhost:8088或者在客户机上访问
http://linuxip:8088,可以看到web页面
至此,hadoop就已经启动成功了。可以发现之前配置的datanode的目录/home/hadoop/dfs/data也已经自动创建了出来。
6.上传文件到hdfs
我们从linux本地文件系统上上传一个文件到hdfs中
cd到hadoop-2.3.0-cdh5.0.0/bin目录下
&hadoop&fs&-put&/home/hadoop/Desktop/1.txt&&/
把事先准备的1.txt上传到hdfs的根目录下,然后查看
&hadoop&fs&-ls&&/
如图,可以看到上传上来的1.txt。
7.停止hadoop
cd到sbin目录下。
&./stop-all.sh
同样因为没有配置ssh免密码,在停止的时候有几次需要输入密码。
之后再运行jps,发现已经没有hadoop的线程了。
一旦停止后,浏览器中也访问不到页面了。
四、安装HBase
1.解压hbase-0.96.1.1-cdh5.0.0.tar.gz
&tar&&-xzvf&&./hbase-0.96.1.1-cdh5.0.0.tar.gz
这样HBase就安装在了/home/hadoop/hbase-0.96.1.1-cdh5.0.0目录下。
2.配置HBase
HBase的配置文件都在hbase-0.96.1.1-cdh5.0.0/conf目录下,需要配置如下文件:
hbase-site.xml
hbase-env.sh
配置hbase-site.xml
&configuration&
&property&
&name&hbase.rootdir&/name&
&value&hdfs://localhost:8020/hbase&/value&
&/property&
&/configuration&
注意这里的hdfs://localhost:8020/hbase是和hadoop中的core-site.xml下的fs.default.name的值hdfs://localhost:8020对应的。只需要再加一个后缀/hbase即可。
配置hbase-env.sh
第29行附近,
export&JAVA_HOME=/usr/java/jdk1.7.0_72
指向JDK的目录。
第122行附近,
export&HBASE_MANAGES_ZK=true
指定HBase是否自己管理zookeeper,因为我们这里是单机版,并且并没有安装zk,所以选true。
3.启动HBase
启动前先要启动hadoop,然后进入hbase-0.96.1.1-cdh5.0.0/bin
&./start-hbase.sh
成功后使用jps命令查看
发现多了HMaster,就是HBase的进程。还可以使用
&./hbase&hbck
命令查看HBase的状态,如果正常会显示Status:&OK。
HBase也有web接口页面,但要先启动HBase&REST服务
&./hbase&rest&start
如果成功则可以访问linux上的HBase&REST服务,地址为http://linuxip:60010/,方法和之前访问hadoop的web页面相同。
此时再运行jps,可以看到多了一个RESTServer进程。
4.创建HBase表
我们创建一张表试试,在hbase-0.96.1.1-cdh5.0.0/bin目录下执行
&./hbase&shell
如果成功会进入HBase的shell操作界面,如下图
&create&'table1','col1'
注意结尾没有分号
再用list命令查看已经存在的表
可以看到刚创建的表table1。
此时在web页面上也可以看到
5.停止HBase
在shell下运行quit命令即可,如下图
停止HBase服务
在hbase-0.96.1.1-cdh5.0.0/bin目录下运行
&./stop-hbase.sh
再运行jps,发现已经没有HMaster进程了,虽然RESTServer进程还在,但因为HBase已经停止了,HBase的web页面也打不开了。
五、安装hive
1.解压hive-0.12.0-cdh5.0.0.tar.gz
&tar&&-xzvf&&./hive-0.12.0-cdh5.0.0.tar.gz
这样hive就安装在/home/hadoop/hive-0.12.0-cdh5.0.0目录下了。
2.配置hive
hive的配置文件在hive-0.12.0-cdh5.0.0/conf和hive-0.12.0-cdh5.0.0/bin目录下,需要配置如下文件:
hive-config.sh
hive-default.xml
hive-site.xml
hive-env.sh
配置 hive-config.sh
hive-config.sh在hive-0.12.0-cdh5.0.0/bin目录下,在70行最后加上如下配置
JAVA_HOME=/usr/java/jdk1.7.0_72
HIVE_HOME=/home/hadoop/hive-0.12.0-cdh5.0.0
HADOOP_HOME=/home/hadoop/hadoop-2.3.0-cdh5.0.0
PATH=$JAVA_HOME/bin:$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HIVE_HOME/lib:/home/hadoop/hbase-0.96.1.1-cdh5.0.0/lib
export&JAVA_HOME
export&HIVE_HOME
export&HADOOP_HOME
export&PATH
export&CLASSPATH
配置hive-default.xml
这个只需要把hive-default.xml.template重命名成hive-default.xml即可
&mv&hive-default.xml.template&hive-default.xml
配置hive-site.xml
hive-site.xml里的配置会覆盖掉hive-default.xml中的配置,这里主要有2处需要注意,一处是确定hive使用什么样的元数据库,一处是如果要想启动hive的web管理页面,需要配置hive的web端war包。
因为hive的元数据库可以用自身的derby,也可以用mysql,选择用什么数据库在130行和136行附近,默认的是derby的配置,如果想用mysql可以把
&property&
&&&name&javax.jdo.option.ConnectionURL&/name&
&&&value&jdbc:derby:;databaseName=metastore_create=true&/value&
&&&description&JDBC&connect&string&for&a&JDBC&metastore&/description&
&/property&
&property&
&&&name&javax.jdo.option.ConnectionDriverName&/name&
&&&value&org.apache.derby.jdbc.EmbeddedDriver&/value&
&&&description&Driver&class&name&for&a&JDBC&metastore&/description&
&/property&
&property&
&&&name&javax.jdo.option.ConnectionURL&/name&&& &value&jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&/value&
&&&description&JDBC&connect&string&for&a&JDBC&metastore&/description&
&/property&
&property&
&&&name&javax.jdo.option.ConnectionDriverName&/name&
&&&value&com.mysql.jdbc.Driver&/value&
&&&description&Driver&class&name&for&a&JDBC&metastore&/description&
&/property&
还有160行附近填写数据库的用户名和密码。
并且把mysql的jdbc驱动jar包放在hive-0.12.0-cdh5.0.0/lib目录下。我这里用的是mysql。因为如果用derby的话一次只能有一个用户链接使用hive,mysql则没有限制。另外注意要修改mysql的访问权限,让hive可以本地访问mysql。不然可能会报java.sql.SQLException:&Access&denied&for&user&'root'@'localhost'&(using&password:&YES)错误。
如果要启用hive的web管理页面,在hive-site.xml的724行附近把
&property&
&&&name&hive.hwi.war.file&/name&
&&&value&lib/hive-hwi-@VERSION@.war&/value&
&&&description&This&sets&the&path&to&the&HWI&war&file,&relative&to&${HIVE_HOME}.&&/description&
&/property&
&property&
&&&name&hive.hwi.war.file&/name&
&&&value&lib/hive-hwi-0.12.0-cdh5.0.0.war&/value&
&&&description&This&sets&the&path&to&the&HWI&war&file,&relative&to&${HIVE_HOME}.&&/description&
&/property&
因为CDH5.0的版本中没有自带hive-hwi-0.12.0-cdh5.0.0.war(apache以前的老版本可能会自带此war包),所以需要下载hive的源代码,自己编译成war。我已经把这篇文章中所讲的对应版本的war包编译好了,下载下来后放在hive-0.12.0-cdh5.0.0/lib目录下即可。
配置hive-env.sh
&mv&hive-env.sh.template&hive-env.sh
先从模版文件复制出hive-env.sh,再编辑hive-env.sh,从48行开始修改如下
HADOOP_HOME=/home/hadoop/hadoop-2.3.0-cdh5.0.0
#&Hive&Configuration&Directory&can&be&controlled&by:
export&HIVE_CONF_DIR=/home/hadoop/hive-0.12.0-cdh5.0.0/conf
#&Folder&containing&extra&ibraries&required&for&hive&compilation/execution&can&be&controlled&by:
export&HIVE_AUX_JARS_PATH=/home/hadoop/hive-0.12.0-cdh5.0.0/lib
3.启动hive
先启动好hadoop,再启动HBase,如果不需要通过hive使用HBase,可以不启动HBase最后启动hive。hive的启动命令在hadoop/hive-0.12.0-cdh5.0.0/bin目录下。启动hive时有几种不同的命令:
./hive&&直接启动hive,进入到hive的命令行下,在命令行模式下进行hive操作
./hive&-hiveconf&hive.root.logger=DEBUG,console&&带日志启动hive,还是在命令行模式下使用hive,但是会输出详细的信息,调试错误时非常有用
./hive&--service&hwi&&带web接口启动hive,此时可以在浏览器打开hive的管理页面,前提是部署了hive-hwi-0.12.0-cdh5.0.0.war。
./hive&--service&hiveserver&&如果要在java代码里调用hive,必须这样启动
我用第二种方式启动,进入命令行
&./hive&-hiveconf&hive.root.logger=DEBUG,console
启动成功后用jps查看,会看到一个RunJar进程。
如果启动多个hvie或者以多种方式启动hive,会看到相应数目的RunJar进程。
4.停止hive
在shell下直接输入quit命令
注意hive的命令结尾要加分号,和hbase不同。
这个时候再用jps命令就看不到RunJar进程了。
5.创建hive表
创建外部表的时候hive只保存表的元数据,可以在hbase中先创建一个表,然后在hive里创建一个外部表来关联hbase中的表。现在我们先创建一个hbase的表。
进入到hbase的shell下执行:
&create&'member','id','address'
&put&'member','r1','id:address','dabaojiao'
要用hive关联hbase的表需要把hbase/lib和hadoop/share/hadoop/common/lib下的一些jar包拷贝到hive/lib目录下。
hbase-client-0.96.1.1-cdh5.0.0.jar,
hbase-server-0.96.1.1-cdh5.0.0.jar,
hbase-common-0.96.1.1-cdh5.0.0.jar,
hbase-protocol-0.96.1.1-cdh5.0.0.jar,
htrace-core-2.01.jar
Hadoop下的
hadoop-common-2.3.0-cdh5.0.0.jar
复制完后要重启hive。
进入hive的shell,关联hbase中的member表,注意此时hbase一定要启动哦。
在shell下输入
&CREATE&EXTERNAL&TABLE&hbase_member(key&string,&value&string)&&&
STORED&BY&'org.apache.hadoop.hive.hbase.HBaseStorageHandler'&&&
WITH&SERDEPROPERTIES&(&hbase.columns.mapping&&=&&id:address&)&&&
TBLPROPERTIES(&hbase.table.name&&=&&member&);
如果不成功就用日志模式启动hive,会有详细的错误堆栈信息,关联hbase表时比较常见的异常是ClassNotFoundException和ClassNotFoundException。这是因为缺少了hadoop或者hbase的jar包,只要找到这些jar包拷贝到hive/lib目录下即可。
hbase中没有创建表,直接在hive中创建内部表,间接在hbase中创建出表
&create&table&hbase_table_1(key&int,&value&string)
stored&by&'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with&serdeproperties&(&hbase.columns.mapping&&=&&:key,cf1:val&)
tblproperties&(&hbase.table.name&&=&&xyz&);
6.使用serde导入json到hive中:
实际使用时可能会有这样的场景,就是把json格式的文件数据导入到hive中,可以通过serde的方式,常见的有2种serde分别介绍下。
6.1通过hive-json-serde-0.2.jar(google&code)导入:把hive-json-serde-0.2.jar拷贝到hive/lib下
CREATE&TABLE&thxd
&&&&callType&STRING,
&&&&callMobile&STRING,
&&&&callTime&STRING,
&&&&callTimeCost&STRING
ROW&FORMAT&SERDE&'org.apache.hadoop.hive.contrib.serde2.JsonSerde'
STORED&AS&TEXTFILE;
再导入json文件
LOAD&DATA&LOCAL&INPATH&&/home/hadoop/thxd.txt&&OVERWRITE&INTO&TABLE&
注意1)thxd.txt是在linux文件系统上的,不是hdfs里,所以从local导入。也可以从hdfs里导入。
2)txhd.txt里并不是合法的json格式,如果改成合法的hive-json-serde-0.2.jar将无法工作。
7.2通过/rcongiu/Hive-JSON-Serde&的serde
把json-serde-1.3-jar-with-dependencies.jar拷贝到hive/lib
&CREATE&TABLE&complex_json&(
&&DocId&string,
&&User&struct&Id:int,
&&&&&&&&&&&&&&Username:string,
&&&&&&&&&&&&&&Name:&string,
&&&&&&&&&&&&&&ShippingAddress:struct&Address1:string,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Address2:string,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&City:string,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&State:string&,
&&&&&&&&&&&&&&Orders:array&struct&ItemId:int,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&OrderDate:string&&&
ROW&FORMAT&SERDE'org.openx.data.jsonserde.JsonSerDe';&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&LOAD&DATA&LOCAL&INPATH'/home/hadoop/test.json'&OVERWRITE&INTO&TABLE&complex_
&SELECT&User.Orders&FROM&complex_
8.通过内置函数json_tuple和get_json_object导入json进入hive
由于get_json_object效率低下,官方推荐使用json_tuple
8.1通过json_tuple导入
8.1.1先建表:
&CREATE&TABLE&thxd_json&(&json&string&);
8.1.2导入数据(这个是标准的json格式文件,后缀名没关系,但格式要对。可在/在线检查json格式)
&LOAD&DATA&LOCAL&INPATH&'/home/hadoop/test.json'&INTO&TABLE&json_
8.1.3使用json_tuple查询
&select&v1.code,&v1.errorDescription,&v2.callMobile,&v2.callTimeCost
from&thxd_json&jt
&&&&&LATERAL&VIEW&json_tuple(jt.json,'code','errorDescription','dataObject')&v1
&&&&&as&code,&errorDescription,&dataObject
&&&&&LATERAL&VIEW&json_tuple(v1.dataObject,'callMobile','callTimeCost')&v2
&&&&&as&callMobile,&callTimeC
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
云计算最近更新

我要回帖

更多关于 hadoop env.cmd 的文章

 

随机推荐