为了用Hadoop集群,我们选用了Ubuntu作为开发的平台,相应的就有一堆在Windows上不会出现的问题需要解决。印象最深刻的就是由于X11的问题,在Windows上用R画图是没问题的,但是换到了Ubuntu上就显示不出来,这个问题直到比赛当天都一直存在,Team Member一直为了这个问题在改,最终还是成功的解决了,在此也对他们表示感谢。
这篇文章就列一下当时配环境时候的一些步骤,方便后人在Ubuntu上搭环境。
JDK安装
- 下载jdk
- Tar –zxvf jdk路径
- 配置环境变量,java_home,path,classpath
Sudo chmod u+x /usr/lib/jvm/java/jdk1.6.0_12.bin
sudo /usr/lib/jvm/java/jdk1.6.0_12.bin
Hadoop安装
- 环境:ubuntu12.10、hadoop1.1.1、jdk1.7
- namenode:master(ip:10.1.151.55)
- datanode:slave1(ip:10.1.151.81)、slave2(ip:10.1.151.82)、slave3(ip:10.1.151.83)
- 配置步骤:
(1)配置NameNode和DataNode:
修改每台机器的/etc/hosts(包括namenode和datanode)
10.1.151.55 master
10.1.151.81 slave1
10.1.151.82 slave2
10.1.151.83 slave3
(2)在所有的机器上建立相同的用户
useradd bit
passwd bit
成功建立bit用户后,输入用户密码就是该用户密码
(3)SSH设置
使用bit用户登录
在所有机器/home/ bit下
mkdir.ssh
在namenode上生成密钥对
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
注意点:
- 不进行以下步骤SSH免密码登录设置会不成功
- .ssh目录要设成700 有执行权限
- authorized_keys要设成600 否则会出错
- 还有ssh 登陆要加入用户名的 比如ssh root@localhost
这时从master向其他机器发起SSH连接,只有第一次登录时需要输入密码,以后则不需要。
(5)在所有机器上安装配置Hadoop
首先在namenode上配置,配置后在分发到datanode上
在这里,下载hadoop-1.1.1.tar.gz,然后解压到/home/bit/下即可
tar -zxvf hadoop-1.1.1.tar.gz
接下来需要修改hadoop的conf文件夹下的配置信息:
修改hadoop-env.sh,加入如下语句,使得hadoop能够找到java的路径:
export JAVA_HOME=/home/bit/jvm/jdk1.7.0
修改core-site.xml,如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs:// master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bit/hadoop-1.1.1/tmp</value>
</property>
</configuration>
注意:hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,在local和hdfs都会建有相同的目录,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。导致namenode启动不起来。
修改hdfs-site.xml,如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改mapred-site.xml,如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
masters里写入作为namenode节点机器的IP或名称
master
slaves里写入作为datanode节点的机器的IP或名称
slave1
slave2
slave3
到此,hadoop的有关配置已经完成,namenode端通过如下命令把配置好的hadoop发送到各个datanode处:
scp -r hadoop-1.1.1 slave1:/home/bit
scp -r hadoop-1.1.1 slave2:/home/bit
scp -r hadoop-1.1.1 slave3:/home/bit
(6)注意点:关闭所有机器上的防火墙,不然会导致datanode起不来
/etc/init.d/iptables stop
在namenode端cd到hadoop文件夹下,格式化分布式文件系统:
bin/hadoop namenode –format
下面接着在namenode端启动hadoop进程:
bin/start-all.sh
如果没有其它差错的话,hadoop可以正常启动。
R安装
-
命令行安装
sudo apt-get install r-base
手动安装
1、下载R安装包
sudo apt-get install gfortran
sudo apt-get install readline-common
sudo apt-get install build-essential
sudo apt-get libx11-dev
./configure –enable-R-shlib
Make
Make install
2、运行
tar -zvxf R-×.tar.gz
解压缩,其中×为R语言的版本号
3、进入解压缩的目录,运行
./configure –prefix=/home/me/R –enable-R-shlib
prefix参数可以设置R将要安装的路径,enable-R-shlib可以保证lib目录下的动态库能够共享,这个选项一定不要忘记添加,否则以后安装某些包的时候会出现“Error in dyn.load”的错误
4、注意问题
- 如果系统会提示“未找到G77编译器的错误”,需要安装一个gfortran,运行命令
sudo apt-get install build-essential
sudo apt-get install gfortran
- 如果出现错误“configure: error: –with-readline=yes (default) and headers/libs are not available”,需要安装libreadline6-dev
sudo apt-get install libreadline6-dev
- 如果出现错误:“configure: error: –with-x=yes (default) and X11 headers/libs are not available”,需要安装libxt-dev
sudo apt-get install libxt-dev
所有依赖包安装好之后,配置就可以成功,此时进行编译就能成功:
运行命令:
make
make install
安装完之后需要配置R的环境变量,R_HOME和R_LIBS和PATH,这样R环境就安装完成。
JRI环境配置
1、在R中安装rJava包,运行R,然后执行
install.packages(“rJava”)
完成rJava的安装
2、下载JRI的三个jar包,分别是:JRI.jar,JRIEngine.jar,REngine.jar
3、配置动态链接库:
- 进入rJava的目录,找到jri目录下的libjri.so将此文件放入到/usr/lib目录下
- 将R安装目录下的libR.so也放入到/usr/lib目录下
即完成了jri环境的配置,这样我们在java环境下就可以直接调用R语言
Tomcat调用R
- 将rjava中的libjri.so和libR.so复制到tomcat安装目录的bin(lib)目录下,这样在tomcat中就可以使用jri,调用R,进行语句执行
- 在tomcat中设置环境变量TOMCAT_HOME和CATALINA_HOME配置为tomcat的安装目录
- 将mysql和postgreSQL的jdbc放置到tomcat的bin和lib目录下,即可访问数据库
System.setProprety(),System.getProprety()设置和获取环境变量
安装mysql数据库
命令行安装
sudo apt-get install mysql-server
手动安装
cp mysql-5.1.51.tar.gz /usr/local/src/
cd /usr/local/src/
groupadd -r mysql
useradd -g mysql -r mysql
gunzip < mysql-5.1.51.tar.gz | tar -xvf -
cd mysql-5.1.51/
./configure –prefix=/usr/local/mysql/
make
make install
cd /usr/local/mysql/
chown -R mysql .
chgrp -R mysql .
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R root
cp /usr/local/mysql/share/mysql/my-huge.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql.server
./bin/mysqld_safe --user=mysql &
chown -R mysql /usr/local/mysql/var/
/etc/init.d/mysql.server status
/etc/init.d/mysql.server start
/usr/local/mysql/bin/mysql
安装postgreSQL数据库
- 运行命令
sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4 //其中版本可以自己设定
/usr/lib/postgresql/8.4/ //存放postgresql相关的二进制文件
/usr/lib/postgresql/8.4/bin/ //可执行文件
/usr/lib/postgresql/8.4/lib/ //共享库文件
/etc/postgres/8.4/main/ //存放postgresql配置文文件
/var/lib/postgresql/ //postgres用户的主文件夹
-
修改PostgreSQL数据库的默认用户postgres的密码
PostgreSQL数据库默认会创建一个postgres的帐号用户作为数据库的管理员,密码是随机的,所以:- 首先,我们需要重置“postgres”用户的密码。
命令行如下:
- 首先,我们需要重置“postgres”用户的密码。
sudo -u postgres psql(或者sudo su postgres -c psql) //运行psql,psql是一个标准的postgressql客户端
postgres=# ALTER USER postgres WITH PASSWORD ‘postgres’; //修改postgres的密码为postgres,不要忘记添加分号(回车后分号之前的sql语句才会立即执行)
postgres=# \q //退出
2.修改了数据库中的密码之后,我们还需要修改linux下的用户 “postgres”的密码:设定成与数据库中postgres帐号相同的密码,即postgres。
sudo passwd -d postgres //删除密码
sudo -u postgres passwd(或者 sudo su postgres -c passwd) //创建密码,然后输入跟之前一样的密码。
- 修改PostgresSQL数据库配置实现远程访问
首先,我们需要编辑postgresql.conf:
sudo gedit /etc/postgresql/8.4/main/postgresql.conf
现在,我们需要修改“连接和权 限”两行。
改变行:#listen_addresses = ‘localhost’ 修改为:listen_addresses = ‘*’
改变行:#password_encryption = on 修改为:password_encryption = on
保存并关闭gedit。
3、最后一步,我们必须设置谁才可以操作数据服务器,这一 切都是在pg_hba.conf中完成的。
sudo gedit /etc/postgresql/8.4/main/pg_hba.conf
把以下内容添加到 pg_hba.conf底部: # to allow your client visiting postgresql server
host all all 0.0.0.0 0.0.0.0 md5
重启服务器,以上的配置就生效了 sudo /etc/init.d/postgresql-8.4 restart
4、创建用户和数据库:
使用命令行创建用户和数据库:
sudo -u postgres createuser -D -P mynewuser //-D该用户没有创建数据库的权利,-P提示输入密码,后面的选项都可以省略,命令执行的时候会提示用户选择yes或者no
sudo -u postgres createdb -O mynewuser mydatabase //-O设定所有者为mynewuser
或者使用psql创建用户和数据库:
首先利用psql登录postgresql服务器 sudo -u postgres psql[ -U postgres -h 127.0.0.1] //运行psql,后面[]中的内容可选,用于登录服务器,默认会登录本机
然后在psql程序中创建用户和数据库:用户名和数据库名称加上引号后才区分大小写,否则会自动转换成小写:
create user “mynewuser” with password ‘mynewuser nocreatedb;
create database “mydatabase” with owner=mynewuser;
安 装和使用pgAdmin3客户端操作 postgresql数据库
安装图形客户端pgAdmin3,安装命令行 sudo apt-get install pgadmin3
Tomcat安装
下载tomcat包,解压,配置TOMCAT_HOME,即可使用tomcat服务
R语言连接数据库的配置
下载mysql postgresql数据库的jdbc将它们添加到系统的classpath中,然后在R中安装rjdbc包,这样我们就可以通过r语言来访问数据库了。