博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop运维记录系列(七)
阅读量:6002 次
发布时间:2019-06-20

本文共 3277 字,大约阅读时间需要 10 分钟。

这段时间一直在搞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 qoutationName: hiveVersion: 0.10.0Release: 1License: Apache License 2.0Group: SystemSource: hive-0.10.0.tar.gzBuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-rootUrl: http://www.phphiveadmin.netPackager: XiangleiBuildArchitectures: noarchRequires: 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%descriptionApache Hive phpHiveAdmin release%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,也不是完全好使,还得修改不少内容和源码才能用的起来。

转载地址:http://mcbmx.baihongyu.com/

你可能感兴趣的文章
一个通用并发对象池的实现
查看>>
才知道系列之GroupOn
查看>>
⑲云上场景:超级减肥王,基于OSS的高效存储实践
查看>>
linux kswapd浅析
查看>>
变更 Linux、Ubuntu 时区、时间
查看>>
高仿QQ空间 侧滑Menu效果且换肤功能《IT蓝豹》
查看>>
mac的git的21个客户端
查看>>
Django之form表单实例
查看>>
Spring Cloud自定义引导属性源
查看>>
OSChina 周日乱弹 ——程序员怎么攒钱买房子!(励志、温情)
查看>>
OSChina 周四乱弹 —— 未来人类的知识宝库
查看>>
mysql树状数据的数据库设计
查看>>
JavaScript快速入门
查看>>
Intger 自动装拆箱
查看>>
html中a连接触发表单提交
查看>>
Linux网卡名改eth0方法
查看>>
SQL or NoSQL——云计算环境中该选择谁
查看>>
托盘气泡很长时间才能消失,uTimeout没起到作用的解决办法
查看>>
利用webshell搭建socks代理
查看>>
nginx+keepalived构建主主负载均衡代理服务器
查看>>