Hadoop+Hive+Derby安装配置文档
Hadoop安装和配置
1生产环境:
普通DB_BI用户
Linux DB_BI 2.6.9-42.ELsmp i686 i686 i386 GNU/Linux
PC Server
2下载软件
jdk-6u16-linux-i586.bin
hadoop-0.19.2.tar.gz
hive-0.3.99.1+0.tar.gz
db-derby-10.3.3.0-bin.tar.gz
3. JDK安装和配置(version1.5以上)。
a)chmod a+x jdk-6u16-linux-i586.bin.
b)./jdk-6u16-linux-i586.bin
c) 配置环境变量
$vi .bash_profile
PATH=$PATH:$HOME/bin:JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME:/bin
:$HIVE_HOME/bin:$DERBY_HOME/bin
export JAVA_HOME=/home/bas_rdp/jdk/jdk1.6.0_16
export HADOOP_HOME=/home/db_bi/hadoop/hadoop-0.19.2
export HIVE_HOME=$HADOOP_HOME/contrib/hive
export DERBY_HOME=$HADOOP_HOME/db-derby-10.3.3.0-bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export NLS_LANG="American_America.ZHS16GBK"
export PATH
d)退出重新登录当前环境变量才生效。
e)验证JDK是否安装成功 $java -version
f)若出现问题可以查看路径是否正确
4. 配置节点
IP和节点名称
db_bi-1:202.197.18.72
db_bi-2:202.197.18.73
db_bi-1中的/etc/hosts文件:
127.0.0.0 localhost localhost
202.197.18.72 db_bi-1 db_bi-1
202.197.18.73 db_bi-2 db_bi-2
db_bi-2中的/etc/hosts文件:
127.0.0.0 localhost localhost
202.197.18.72 db_bi-1 db_bi-1
202.197.18.73 db_bi-2 db_bi-2
(备注:对于Hadoop来说,在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一个,Datanode可以是很多;在MapReduce看来,节点又分为 Jobtracker和Tasktracker,其中Jobtracker只有一个,Tasktracker可以是很多。我是将 namenode和jobtracker部署在db_bi-1上,db_bi-2作为datanode和tasktracker。当然你也可以将namenode,datanode,jobtracker,tasktracker全部部署在一台机器上)
目录结构
由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名帐户。
如:都有一个db_bi的帐户,主目录是/home/db_bi
Hadoop部署目录结构如下
/home/db_bi/HadoopInstall,所有的hadoop版本放在这个目录中。将hadoop-0.19.2.tar压缩包解压至此,为了方便以后升级,建议建立一个链接指向要使用的hadoop的版本,名称不妨设为hadoop
[db_bi@db_bi-1:HadoopInstall]$ln -s hadoop0.19.2 hadoop
这样一来,所有的配置文件都在/hadoop/conf/目录中,所有执行程序都在/hadoop/bin目录中。 但是由于上述目录中hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级hadoop版本的时候所有的配置文件都会被覆盖,因 此建议将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,/home/dbrg/HadoopInstall/hadoop- config/,然后将/hadoop/conf/目录中的hadoop_site.xml,slaves,hadoop_env.sh三个文件拷贝到 hadoop-config/目录中(这个问题很奇怪,在官网上的Getting Started With Hadoop中 说是只需要拷贝这个三个文件到自己创建的目录就可以了,但我在实际配置的时候发现还必须把masters这个文件也拷贝到hadoop-conf/目录中才行,不然启动Hadoop的时候就会报错说找不到masters这个文件),并指定环境变量$HADOOP_CONF_DIR指向该目录。环境变量在 /home/dbrg/.bashrc和/etc/profile中设定。
综上所述,为了方便以后升级版本,我们需要做到配置文件与安装目录分离,并通过设定一个指向我们要使用的版本的hadoop的链接,这样可以减少我们对配置文件的维护。在下面的部分,你就会体会到这样分离以及链接的好处了。
SSH设置
在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
对于db_bi-1(db_bi-2同样)
[db_bi@db_bi-1.ssh]$ssh-keygen -t rsa
[db_bi@db_bi-1.ssh]$ssh-keygen -t dsa
将双方的id_rsa.pub id_dsa.pub 都追加到authorized_keys
[db_bi@db_bi-1.ssh]$scp authorized_keys db_bi-2:/home/db_bi/.ssh/
双方都各自拷贝一份啊
[db_bi@db_bi-1.ssh]$chmod 644 authorized_keys
将权限都设置为644这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。
接着,每台机器上都需要对sshd服务进行配置(其实是可以不用配置的,完成了上面的那些操作了以后SSH就已经可以工作了),在每台机器上修改文件/etc/ssh/sshd_config
#去除密码认证
PasswordAuthentication no
AuthorizedKeyFile .ssh/authorized_keys
至此各个机器上的SSH配置已经完成,可以测试一下了!
[db_bi@db_bi-1.ssh]$ ssh db_bi-2
5 安装和配置Hadoop
Hadoop环境变量
在/home/db_bi/HadoopInstall/hadoop-conf目录下的hadoop_env.sh中设置Hadoop需要的环
境变量,其中JAVA_HOME是必须设定的变量。HADOOP_HOME变量可以设定也可以不设定,如果
不设定,HADOOP_HOME默认的是bin目录的父目录,
即本文中的/home/db_bi/ HadoopInstall/hadoop
[db_bi@db_bi-1~]$vi .bash_profile
PATH=$PATH:$HOME/bin:JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME:/bin:$HIVE_HOME/bin:$DERBY_HOME/bin
export JAVA_HOME=/home/bas_rdp/jdk/jdk1.6.0_16
export HADOOP_HOME=/home/db_bi/HadoopInstall/hadoop
export HIVE_HOME=$HADOOP_HOME/contrib/hive
export DERBY_HOME=$HADOOP_HOME/db-derby-10.3.3.0-bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export NLS_LANG="American_America.ZHS16GBK"
export PATH
从这个地方就可以看出前面所述的创建hadoop0.19.2的链接hadoop的优点了,当以后更新hadoop的版本的时候,就不需要在改配置文件,只需要更改链接就可以了。
Hadoop配置文件
在hadoop-conf/目录下,打开slaves文件,该文件用来指定所有的从节点,一行指定一个主机名。即本文中的db_bi-2因此slaves文件看起来应该是这样的
db_bi-2
db_bi-..
在conf/目录中的hadoop-default.xml中包含了Hadoop的所有配置项,但是不允许直接修改!可以在hadoop-conf/目录下的hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值。可以根据自己的实际需要来进行定制。
如下配置档:
部署Hadoop
前面讲的这么多Hadoop的环境变量和配置文件都是在db_bi-1这台机器上的,现在需要将hadoop部署到其他的机器上,保证目录结构一致
[db_bi@db_bi-1:~]$scp -r /home/db_bi/HadoopInstall db_bi-2:/home/db_bi/
至此,可以说,Hadoop已经在各个机器上部署完毕了下面就让我们开始启动Hadoop吧
启动/停止Hadoop
启动之前,我们先要格式化namenode,先进入~/HadoopInstall/hadoop目录,执行下面的命令
[db_bi@db_bi-1:hadoop]$bin/hadoop namenode -format
不出意外,应该会提示格式化成功。如果不成功,就去hadoop/logs/目录下去查看日志文件
下面就该正式启动hadoop啦,在bin/下面有很多启动脚本,可以根据自己的需要来启动。
* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack
* stop-all.sh 停止所有的Hadoop。
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack。
* stop-mapred.sh 停止Map/Reduce守护
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode
* stop-dfs.sh 停止DFS守护
简单启动所有守护
[db_bi@db_bi-1:hadoop]$bin/start-all.sh
简单停止hadoop
[db_bi@db_bi-1:hadoop]$bin/stop-all.sh
HDFS操作
运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。
建立目录
[db_bi@db_bi-1:hadoop]$bin/hadoop dfs -mkdir testdir
在HDFS中建立一个名为testdir的目录
复制文件
[db_bi@db_bi-1:hadoop]$bin/hadoop dfs -put /home/db_bi/large.zip testfile.zip
把本地文件large.zip拷贝到HDFS的根目录/user/db_bi/下,文件名为testfile.zip
查看现有文件
[db_bi@db_bi-1:hadoop]$bin/hadoop dfs -ls
运行MapReduce作业
然后运行bin/hadoop dfs –put ./input input
把本地要执行的java文件所在的包打成jar包,
命令如下:java –cvf h.jar had
运行jar包
bin/hadoop jar h.jar had.SplitWord(类名)input output.
bin/hadoop dfs –cat output/*(看运行的结果)
bin/hadoop dfs –cat output/part-00000>>****.log
Hive安装和配置
1.下载hive(http://archive.cloudera.com/cdh/testing/hive-0.3.99.1.0.tar.gz)
解包把它放到目录 /usr/local/hadoop/contrib并改名为hive。
2. hive ,hadoop环境变量
[db_bi@db_bi-1~]$vi .bash_profile
PATH=$PATH:$HOME/bin:JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME:/bin:$HIVE_HOME/bin:$DERBY_HOME/bin
export JAVA_HOME=/home/bas_rdp/jdk/jdk1.6.0_16
export HADOOP_HOME=/home/db_bi/HadoopInstall/hadoop
export HIVE_HOME=$HADOOP_HOME/contrib/hive
export DERBY_HOME=$HADOOP_HOME/db-derby-10.3.3.0-bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export NLS_LANG="American_America.ZHS16GBK"
export PATH
3.修改配置文件:hive-default.xml (可以连接berby、 postgres等数据库)
这里用的是berby 数据库
注意:
对于嵌入式的derby要求在hive的lib目录下有文件derby.jar,而对于客服模式的derby要求有derbyclient.jar文件
4.运行hive
bin/hive
Derby数据库
1 Derby数据库介绍
Derby是用纯Java写的一个事务、关系数据库,只占用很少的磁盘空间。Derby起源于CloudScape,后者是IBM从Informix获取的产品。在2004年,IBM决定将CloudScape开放源代码,使之成为Apache Software Foundation下的一个孵卵器项目,其名称为Derby。使用Derby的实际好处在于它需要最少的管理以及小的资源占用。磁盘上的数据库比较小,对于基本数据库,大约是2MB。管理最少的事实允许开发人员在代码中轻松地创建和使用数据库。这加速了开发。因为Derby支持归档在JAR文件中的数据库的存储,这使您只需分发JAR文件,因而部署变得如此轻松。
2 安装与配置
Derby官方主页:http://db.apache.org/derby/index.html
Derby下载页面:http://db.apache.org/derby/derby_downloads.html
要安装Derby,你必须先从Derby的网站下载Derby最新版本的zip或者tar包。当前最新版本是db-derby-10.3.2.1-bin 。
发行版本有:
--二进制发行版包括了代码,示例程序和文档.已经优化了的jar文档在lib目录下
--lib发行版本包括了优化程序,部署Derby的最小jar的集合.
--lib-debug发行版本包括了调试Derby和报告问题的有用的最大集合.
--src发行版本包括了要来产生上面三个发行版的源文件.
安装Derby,只要把你下载的包文件解压到你指定的目录即可。
假定你下载的是二进制发行版。
解压下载的包,之后有以下几个子目录:
--demo包括了示例程序
--bin包括了运行和设置环境的代码
--javadoc包括了有源代码生产的aip文档
--doc包括了Derby文档
--lib包括了Derby的jar文件
3 根据Derby手册说明,配置Derby有几种方式:
1. 通过java命令运行安装目录lib相应的工具。
2. 通过运行Derby提供的脚本命令。先配置PATH环境变量指向Derby目录下bin目录,然后运行bin目录内相关批处理命令,即可。
3. 通过运行安装目录lib内的derbyrun.jar归档文件。
java -jar derbyrun.jar ij [-p propertiesfile] [sql script]
java -jar derbyrun.jar sysinfo [-cp ...] [-cp help]
java -jar derbyrun.jar dblook [args](或如果调用时没有使用参数,则可执行 jar 文
件将显示用法消息)
java -jar derbyrun.jar server [args](或如果调用时没有使用参数,则可执行 jar 文
件将显示用法消息)
4 Derby数据库服务器:
(在$DERBY_HOME/demo下面执行)
Java -jar $DERBY_HOME /lib/derbyrun.jar server start 启动服务器:
Java -jar $DERBY_HOME /lib/derbyrun.jar server shutdown 关闭服务器:
备注:(
查找pid
[bas_rdp@BI-DB bin]$ /usr/sbin/lsof -i | grep '1527'
java 23516 bas_rdp 30u IPv6 133387975 TCP localhost.localdomain:1527 (LISTEN)
杀死 pid
[bas_rdp@BI-DB bin]$ kill -9 23516
derby连接;
不管怎么启动总是只能用localhost连接,一旦localhost替换成地址就不行。
比如: 连接derby数据库采用网络模式,
Class.forName("com.ibm.db2.jcc.DB2Driver");
conn=DriverManager.getConnection("jdbc:derby:net://localhost/dellcount","sunyu","123");
这样就能连接成功。把localhost改成本地的ip地址(192.168.2.4),就不行。
报错:错误08001 com.ibm.db2.jcc.c.SqlException: java.net.ConnectException : Error
opening socket to server 192.168.1.130 on port 1527 with message : Connection refused: connect
你先关闭derby 服务, 然后用这个命令 启动:
..\NetworkServerControl start -h 192.168.2.4 -p 1527
(形式 ..\networkservercontrol start -h %ip地址% -p %port%)
然后再尝试连接。
这是因为,derby 的用户名和密码是公开的, 允许远程连接是不安全的因素。
你用startnetworkserver 命令的时候,开启的网络服务,虽然允许多客户端多进程,但仅限本机使用 如希望使用 ip地址 远程连接,必须强制指定提供服务的IP 地址和 端口,否则仅限localhost.
)
5连接DERBY数据库:
$DERBY_HOME /bin/ I j
ij 版本 10.3
ij>
然后运行创建数据库MyDBtest:
ij>Connect ‘jdbc:derby:MyDBtest;create=true’
在上面的Url中指定create=true,则创建一个新的数据库。
连接该数据库:
ij> Connect 'jdbc:derby:MyDBtest;';
ij(CONNECTION1)>
这时就可以运行相应SQL语句,进行数据库操作。该步骤为单用户嵌入式数据库操作。
6 使用与相关命令
官方手册文档:http://db.apache.org/derby/manuals/index.html
PDF格式手册:http://download.csdn.net/source/426441 下载
IJ工具支持的命令包括:
PROTOCOL 'JDBC protocol' [ AS ident ];
- 设置缺省协议或已命名的协议
DRIVER 'class for driver'; - 装入已命名的类
CONNECT 'url for database' [ PROTOCOL namedProtocol ] [ AS connectionNam
- 连接至数据库 URL
- 可以指定标识
SET CONNECTION connectionName; - 切换到指定的连接
SHOW CONNECTIONS; - 列示所有连接
AUTOCOMMIT [ ON | OFF ]; - 设置连接的自动落实方式
DISCONNECT [ CURRENT | connectionName | ALL ];
- 删除当前连接、已命名的连接或所有连接;
- 缺省值是 CURRENT
SHOW SCHEMAS; - 在当前数据库中列示所有模式
SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema };
- 列示表、视图、过程或同义词
SHOW INDEXES { IN schema | FROM table };
- 列示模式中的索引或表的索引
DESCRIBE name; - 列示已命名表中的列
COMMIT; - 落实当前事务
ROLLBACK; - 回滚当前事务
PREPARE name AS 'SQL-J text'; - 准备 SQL-J 文本
EXECUTE { name | 'SQL-J text' } [ USING { name | 'SQL-J text' } ] ;
- 使用来自 USING 结果集行的
- 参数值执行语句
REMOVE name; - 除去已命名的先前预编译语句
RUN 'filename'; - 从命名文件运行命令
ELAPSEDTIME [ ON | OFF ]; - 设置 ij 的耗用时间方式
MAXIMUMDISPLAYWIDTH integerValue;
- 将每列的最大显示宽度设置为
- 整数值
ASYNC name 'SQL-J text'; - 在另一个线程中运行命令
WAIT FOR name; - 等待 ASYNC'd 命令的结果
GET [SCROLL INSENSITIVE] CURSOR name AS 'SQL-J query';
- 在查询中获取游标(JDBC 结果集)
- SCROLL 游标仅适用于
- JDBC 2.0 和更高版本。
-(在 JDBC 1.X. 中忽略游标滚动类型)
NEXT name; - 从已命名的游标获取下一行
FIRST name; - 从已命名的滚动游标获取第一行
LAST name; - 从已命名的滚动游标获取最后一行
PREVIOUS name; - 从已命名的滚动游标获取前一行
ABSOLUTE integer name; - 在绝对行号上定位已命名的滚动游标
-(负数表示从最后一行起算的位置。)
RELATIVE integer name; - 相对与当前行定位已命名的滚动游标
-(整数是行号)
AFTER LAST name; - 将已命名的滚动游标定位于最后一行的后面
BEFORE FIRST name; - 将已命名的滚动游标定位于第一行的前面
GETCURRENTROWNUMBER name; - 返回已命名的滚动游标当前位置的行号
--(当游标的位置不在一个行上时返回 0。)
CLOSE name; -- 关闭已命名的游标
LOCALIZEDDISPLAY [ ON | OFF ];
-- 控制语言环境敏感数据表示法
EXIT; -- 退出 ij
HELP; -- 显示此消息
SHOW TABLES; --查看数据库里的有多少表
SYSINFO; --查看系统安装信息
DBLOOK;