这段时间一直在搞Hadoop集群迁移,最近Hadoop也没出什么大问题,就没更新运维系列。这次的运维系列也跟Hadoop自己的故障无关,主要是自动化运维。
不过我确实犯了一个严重的错误,在迁移新集群的时候,为了安装部署方便,我把hbase打成了rpm包的方式进行部署。在编写spec文件的时候,一个变量少写了一对花括号,结果把操作系统的文件给删掉了。而我恰恰是在新集群的生产环境下去编译rpm,后果就是那台服务器崩溃了。这是我这么多年第一次间接的执行了一下rm -rf /,尽管新集群还没开始正式上线跑,没造成任何影响,但是这个实在是太丢人了。以后坚决要在虚拟机里打rpm。
这次的运维记录系列主要是记录一下在Hadoop运维下,如何把Hadoop及周边生态软件打包成rpm和deb的方式,这个方式同样也可以用在其他软件的部署上。阅读这次的记录系列,你需要掌握以下技能:基本的rpm操作命令,hadoop生态系统的基本环境变量设置和源码知识。
以打包Hive为例,为啥不以打包hbase,因为hbase打包太过复杂,不仅需要修改官方的spec文件,还要修改hbase自身的源码。上来就说hbase打包rpm估计绝大多数人看不懂,而hive官方不提供spec文件,可以自己编写,hive本身的工作结构比较简单,也不需要修改源码,所以打包起来的spec文件也不复杂,复杂的以后慢慢记录。这个spec脚本是我自己写的,反正能用就行了。
Summary: Hive 0.10.0, Apache Hive, Rpm by Xianglei, include mysql jdbc connector and fixed hive-exec.jar for get_json_object judgement of quotation and double qoutation
Name: hive
Version: 0.10.0
Release: 1
License: Apache License 2.0
Group: System
Source: hive-0.10.0.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Url: http://www.phphiveadmin.net
Packager: Xianglei
BuildArchitectures: noarch
Requires: jdk >= 1.6, hadoop
%define bin_dir /usr/bin
%define lib_dir /usr/lib
%define conf_dir /etc/hive
%define scripts_dir /usr/share/scripts
%description
Apache Hive phpHiveAdmin>
%prep
%setup -q -n %{name}-%{version}
%build
%install
%__rm -rf $RPM_BUILD_ROOT
%__mkdir -p $RPM_BUILD_ROOT/%{bin_dir}/
%__mkdir -p $RPM_BUILD_ROOT/%{lib_dir}/
%__mkdir -p $RPM_BUILD_ROOT/%{conf_dir}/
%__mkdir -p $RPM_BUILD_ROOT/%{scripts_dir}/
%__cp -rf bin/* $RPM_BUILD_ROOT/%{bin_dir}/
%__cp -f HivePlugin.jar $RPM_BUILD_ROOT/%{lib_dir}/
%__cp -rf lib/* $RPM_BUILD_ROOT/%{lib_dir}/
%__cp -rf conf/* $RPM_BUILD_ROOT/%{conf_dir}/
%__cp -rf scripts/* $RPM_BUILD_ROOT/%{scripts_dir}/
useradd -g hadoop hive
%files
%defattr(-,root,root)
%config(noreplace) %{conf_dir}/hive-site.xml
%config(noreplace) %{conf_dir}/hive-env.sh
%{bin_dir}/*
%{lib_dir}/*
%{conf_dir}/*
%{scripts_dir}/*
%clean
%__rm -rf $RPM_BUILD_ROOT
大概说一下,逐行解释太累了。
第一行是发行版的汇总说明,Hive-0.10.0,apache版本,鄙人打的包,在里面包含了mysql的jdbc驱动和修改后的hive-exec.jar,因为0.10.0版本严格了gen_json_object的语法,禁用了单引号的json格式,而我们好多数据里都是单引号的json,所以我让同事修改了这部分的java源码,自动适应单引号和双引号,重新打包成jar。
名称:Hive
版本:0.10.0
发行版本:1
Requires: jdk >= 1.6, hadoop
这段是定义你的软件依赖于其他什么软件,操作系统中必须同时存在jdk >= 1.6的版本和hadoop才可以安装这个hive,否则rpm -ivh的时候会出现faild dependence...什么玩意,当然,这些也都是需要用rpm安装的,官方都提供了。
然后是定义rpm安装完以后,hive相应的路径都在什么位置下,以及他们在spec文件中对应的变量。
bin_dir是spec中的变量,/usr/bin是rpm安装完以后,hive的bin文件夹路径。
%setup 是将hive源包就是上面指定的hive-0.10.0.tar.gz解压缩到rpmbuild/BUILD文件夹下。对于centos5来说。这个路径是/usr/src/redhat/BUILD,对于centos6来说,就是你当前工作目录的rpmbuild/BUILD。
%build对我们没用,hive已经是编译好的了,%build和%configure主要是针对从源码编译。
%install是具体的安装操作,都是些linux基本操作
最后是设置属性和清理BUILDROOT文件夹。
rpm的打包,网上有很多详细讲解的文章,这里就不详细说了。用rpmbuild即可,而对于debian和ubuntu这类系统,rpm可以直接转换成deb。
这个主要的思路是为了省事,我不想去逐台执行tar zxf xxxxx.tar.gz,然后再把配置文件逐台拷贝,直接一台配置好了,打包rpm,去每个服务器执行rpm -ivh xxxx.rpm,然后直接启动就好了。
在hbase打包的过程中,除了要修改官方提供的hbase.spec,还需要修改hbase本身的部分脚本源码,比如在spec中,指定了在安装完成后,需要执行一个sbin/update-hbase-env.sh,但这个脚本里面有些路径是写死的,有问题,要根据实际情况进行调整。比如我是用rpm安装的hadoop,HADOOP_HOME在/usr下。而脚本中寻找HADOOP_JAR是在$HADOOP_HOME/*.jar,这样肯定是找不到的。就需要修改update-hbase-env.sh中的HADOOP_JAR到$HADOOP_HOME/share/hadoop/*.jar,对zookeeper也是这样处理,这些是需要注意的。还有hbase命令,hbase-daemon.sh这些命令,也需要自己去修改脚本,以适应rpm打包后的路径要求。
不过需要了解的是,hadoop生态系统中,除了hadoop的hbase,其他软件都不提供spec文件,都得自己编写。而hadoop和hbase的spec,也不是完全好使,还得修改不少内容和源码才能用的起来。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com