Hadoop

 

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以上)

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

       db_bi-2202.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看来,节点分为NamenodeDatanode,其中Namenode只有一个,Datanode可以是很多;在MapReduce看来,节点又分为 JobtrackerTasktracker,其中Jobtracker只有一个,Tasktracker可以是很多。我是将 namenodejobtracker部署在db_bi-1上,db_bi-2作为datanodetasktracker。当然你也可以将namenodedatanodejobtrackertasktracker全部部署在一台机器上)

 

 

目录结构

由于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.xmlslaveshadoop_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是通过SSHSecure 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中的默认值。可以根据自己的实际需要来进行定制。

如下配置档:

fs.default.name

db_bi-1:9000

The name of the default file system. Either the literal string "local" or a host:port for DFS.

mapred.job.tracker

db_bi-1:9001

The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.

hadoop.tmp.dir

/home/db_bi/HadoopInstall/tmp

A base for other temporary directories.

 

dfs.name.dir

/home/db_bi/HadoopInstall/filesystem/name

Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.

dfs.data.dir

/home/db_bi/HadoopInstall/filesystem/data

Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.

dfs.replication

1

Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.

 

部署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守护。包括JobtrackerTasktrack

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护.NamenodeDatanode

* 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 数据库

  javax.jdo.option.ConnectionURL

  jdbc:derby:;databaseName=metastore_db;create=true 

JDBC connect string for a JDBC metastore

  javax.jdo.option.ConnectionDriverName

  org.apache.derby.jdbc.EmbeddedDriver

 

  Driver class name for a JDBC metastore

注意:

对于嵌入式的derby要求在hivelib目录下有文件derby.jar,而对于客服模式的derby要求有derbyclient.jar文件

4.运行hive

bin/hive

 

Derby数据库

1 Derby数据库介绍

Derby是用纯Java写的一个事务、关系数据库,只占用很少的磁盘空间。Derby起源于CloudScape,后者是IBMInformix获取的产品。在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包括了Derbyjar文件

 

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;

 

 

请使用浏览器的分享功能分享到微信等