首页 文章 精选 留言 我的

精选列表

搜索[MaaS平台],共10000篇文章
优秀的个人博客,低调大师

快速架设OpenStack云基础平台

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处、作者信息和本声明。否则将追究法律责任。 http://chenguang.blog.51cto.com/350944/968169 通常在linux下手工安装openstack比较麻烦,StackOps是一个可以快速安装的Openstack解决方案,首先我们下载StackOps的iso文件(stackops-0.5-b1312-d20120510.iso实际上是一个基于Ubuntu10.04,http://pan.baidu.com/s/1jGJxjee (下载地址) ),然后就可以在vmware里安装了,经过注册和配置就可以立即享用OpenStack云基础架构。 安装过程就相当于一个浓缩了的Ubuntu,只需要选择键盘布局、分区设置IP地址等信息,但root密码是设定好的,默认是stackops 上图为初始安装画面 经过几分钟安装,我们就可以到客户端上连接服务器了,打开http://ip:8888,将立刻跳转到http://installer.stackops.org,这时需要注册一个用户,用刚刚注册的用户登录,就能看到如下画面。 这里我们就选择SingleNode架构,点击Startdeployment,如下图所示 根据自己情况选择默认就可以,值得注意的是FloatingIPrange划分子网时要注意,不要冲突。在点击"Startdeployment"按钮后,配置就完成,稍后你需要等待一些时间才能最后完成配置。这时经过几个简单配置一个OpenStack环境就建立好了。 以下是一段配置视频供参考: 本文出自 “李晨光原创技术博客” 博客,请务必保留此出处http://chenguang.blog.51cto.com/350944/968169

优秀的个人博客,低调大师

高可用Hadoop平台-Hue In Hadoop

1.概述 今天为大家介绍另一款工具——Hue,该工具功能比较丰富,下面是今天为大家分享的内容目录: Hue简述 Hue In Hadoop 截图预览 本文所使用的环境是Apache Hadoop-2.6版本,下面开始今天的内容分享。 2.Hue简述 Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。 Hue在数据库方面,默认使用的是SQLite数据库来管理自身的数据,包括用户认证和授权,另外,可以自定义为MySQL数据库、Postgresql数据库、以及Oracle数据库。其自身的功能包含有: 对HDFS的访问,通过浏览器来查阅HDFS的数据。 Hive编辑器:可以编写HQL和运行HQL脚本,以及查看运行结果等相关Hive功能。 提供Solr搜索应用,并对应相应的可视化数据视图以及DashBoard。 提供Impala的应用进行数据交互查询。 最新的版本集成了Spark编辑器和DashBoard 支持Pig编辑器,并能够运行编写的脚本任务。 Oozie调度器,可以通过DashBoard来提交和监控Workflow、Coordinator以及Bundle。 支持HBase对数据的查询修改以及可视化。 支持对Metastore的浏览,可以访问Hive的元数据以及对应的HCatalog。 另外,还有对Job的支持,Sqoop,ZooKeeper以及DB(MySQL,SQLite,Oracle等)的支持。 下面就通过集成部署,来预览相关功能。 3.Hue In Hadoop 本文所使用的Hadoop环境是基于Apache社区版的Hadoop2.6,在集成到Hadoop上,Hue的部署过程是有点复杂的。Hue在CDH上是可以轻松的集成的,我们在使用CDH的那套管理系统是,可以非常容易的添加Hue的相关服务。然而,在实际业务场景中,往往Hadoop集群使用的并非都是CDH版的,在Cloudera公司使用将其贡献给Apache基金会后,在Hadoop的集成也有了较好的改善,下面就为大家介绍如何去集成到Apache的社区版Hadoop上。 3.1基础软件 在集成Hue工具时,我们需要去下载对应的源码,该系统是开源免费的,可以在GitHub上下载到对应的源码,下载地址如下所示: git@github.com:cloudera/hue.git 我们使用Git命令将其克隆下来,命令如下所示: git clone git@github.com:cloudera/hue.git 然后,我们在Hadoop账号下安装Hue需要的依赖环境,命令如下所示: sudo yum install krb5-devel cyrus-sasl-gssapi cyrus-sasl-deve libxml2-devel libxslt-devel mysql mysql-devel openldap-devel python-devel python-simplejson sqlite-devel 等待其安装完毕。 3.2编译部署 在基础环境准备完成后,我们开始对Hue的源码进行编译,编译的时候,Python的版本需要是2.6+以上,不然在编译的时候会出现错误,编译命令如下所示: [hadoop@nna ~]$ cd hue [hadoop@nna ~]$ make apps 等待其编译完成,在编译的过程中有可能会出现错误,在出现错误时Shell控制台会提示对应的错误信息,大家可以根据错误信息的提示来解决对应的问题,在编译完成后,我们接下来需要对其做对应的配置,Hue的默认配置是启动本地的Web服务,这个我们需要对其修改,供外网或者内网去访问其Web服务地址,我们在Hue的根目录下的desktop/conf文件夹下加pseudo-distributed.ini文件,然后我们对新增的文件添加如下内容: vi pseudo-distributed.ini [desktop] http_host=10.211.55.28 http_port=8000 [hadoop] [[hdfs_clusters]] [[[default]]] fs_defaultfs=hdfs://cluster1 logical_name=cluster1 webhdfs_url=http://10.211.55.26:50070/webhdfs/v1 hadoop_conf_dir=/home/hadoop/hadoop-2.6.0/etc/hadoop [beeswax] hive_server_host=10.211.55.17 hive_server_port=10000 # hive_conf_dir=/home/hive/warehouse [hbase] hbase_clusters=(cluster1|10.211.55.26:9090) hbase_conf_dir=/home/hadoop/hbase-1.0.1/conf 关于Hue的详细和更多配置需要,大家可以参考官方给的知道文档,连接地址如下 所示: http://cloudera.github.io/hue/docs-3.8.0/manual.html 这里,Hue的集成就完成了,下面可以输入启动命令来查看,命令如下所示: [hadoop@nna ~]$ /root/hue-3.7.1/build/env/bin/supervisor & 启动信息如下所示: 下面,在浏览器中输入对应的访问地址,这里我配置的Port是8000,在第一次访问时,需要输入用户名和密码来创建一个Administrator,这里需要在一步的时候需要注意下。 4.截图预览 下面附上Hue的相应的截图预览,如下图所示: 5.总结 在编译的时候,大家需要注意Hue的依赖环境,由于我们的Hadoop集群不是CDH版本的,所以在集成Hue的服务不能像CDH上那么轻松。在Apache的Hadoop社区版上集成部署,会需要对应的环境,若是缺少依赖,在编译的时候是会发生错误的。所以,这里需要特别留心注意,出错后,一般都会有提示信息的,大家可以根据提示检查定位出错误原因。 6.结束语 这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

优秀的个人博客,低调大师

配置高可用的Hadoop平台

1.概述 在Hadoop2.x之后的版本,提出了解决单点问题的方案--HA(High Available 高可用)。这篇博客阐述如何搭建高可用的HDFS和YARN,执行步骤如下: 创建hadoop用户 安装JDK 配置hosts 安装SSH 关闭防火墙 修改时区 ZK(安装,启动,验证) HDFS+HA的结构图 角色分配 环境变量配置 核心文件配置 slave 启动命令(hdfs和yarn的相关命令) HA的切换 效果截图 下面我们给出下载包的链接地址: zookeeper下载地址 hadoop2.x下载地址 JDK下载地址 注:若JDK无法下载,请到Oracle的官网下载JDK。 到这里安装包都准备好了,接下来我们开始搭建与配置。 2.搭建 2.1创建Hadoop用户 useradd hadoop passwd hadoop 然后根据提示,设置密码。接着我给hadoop用户设置面免密码权限,也可自行添加其他权限。 chmod +w /etc/sudoers hadoop ALL=(root)NOPASSWD:ALL chmod -w /etc/sudoers 2.2安装JDK 将下载好的安装包解压到 /usr/java/jdk1.7,然后设置环境变量,命令如下: sudo vi /etc/profile 然后编辑配置,内容如下: export JAVA_HOME=/usr/java/jdk1.7 export PATH=$PATH:$JAVA_HOME/bin 然后使环境变量立即生效,命令如下: source /etc/profile 然后验证JDK是否配置成功,命令如下: java -version 若显示对应版本号,即表示JDK配置成功。否则,配置无效! 2.3配置hosts 集群中所有机器的hosts配置要要相同(推荐)。可以避免不必要的麻烦,用域名取代IP,方便配置。配置信息如下: 10.211.55.12 nna # NameNode Active 10.211.55.13 nns # NameNode Standby 10.211.55.14 dn1 # DataNode1 10.211.55.15 dn2 # DataNode2 10.211.55.16 dn3 # DataNode3 然后用scp命令,将hosts配置分发到各个节点。命令如下: # 这里以NNS节点为例子 scp /etc/hosts hadoop@nns:/etc/ 2.4安装SSH 输入如下命令: ssh-keygen –t rsa 然后一路按回车键,最后在将id_rsa.pub写到authorized_keys,命令如下: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 在hadoop用户下,需要给authorized_keys赋予600的权限,不然免密码登陆无效。在其他节点只需要使用 ssh-keygen –t rsa命令,生产对应的公钥,然后将各个节点的id_rsa.pub追加到nna节点的authorized_keys中。最后,将nna节点下的authorized_keys文件通过scp命令,分发到各个节点的 ~/.ssh/ 目录下。目录如下: # 这里以NNS节点为例子 scp ~/.ssh/authorized_keys hadoop@nns:~/.ssh/ 然后使用ssh命令相互登录,看是否实现了免密码登录,登录命令如下: # 这里以nns节点为例子 ssh nns 若登录过程中木有提示需要输入密码,即表示密码配置成功。 2.5关闭防火墙 由于hadoop的节点之间需要通信(RPC机制),这样一来就需要监听对应的端口,这里我就直接将防火墙关闭了,命令如下: chkconfig iptables off 注:如果用于生产环境,直接关闭防火墙是存在安全隐患的,我们可以通过配置防火墙的过滤规则,即将hadoop需要监听的那些端口配置到防火墙接受规则中。关于防火墙的规则配置参见“linux防火墙配置”,或者通知公司的运维去帮忙配置管理。 同时,也需要关闭SELinux,可修改 /etc/selinux/config 文件,将其中的 SELINUX=enforcing 改为 SELINUX=disabled即可。 2.6修改时区 各个节点的时间如果不同步,会出现启动异常,或其他原因。这里将时间统一设置为Shanghai时区。命令如下: # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp: overwrite `/etc/localtime'? yes 修改为中国的东八区 # vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false ARC=false 2.7ZK(安装,启动,验证) 2.7.1安装 将下载好的安装包,解压到指定位置,这里为直接解压到当前位置,命令如下: tar -zxvf zk-{version}.tar.gz 修改zk配置,将zk安装目录下conf/zoo_sample.cfg重命名zoo.cfg,修改其中的内容: # The number of milliseconds of each tick # 服务器与客户端之间交互的基本时间单元(ms) tickTime=2000 # The number of ticks that the initial # synchronization phase can take # zookeeper所能接受的客户端数量 initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement # 服务器和客户端之间请求和应答之间的时间间隔 syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. # 保存zookeeper数据,日志的路径 dataDir=/home/hadoop/data/zookeeper # the port at which the clients will connect # 客户端与zookeeper相互交互的端口 clientPort=2181 server.1= dn1:2888:3888 server.2= dn2:2888:3888 server.3= dn3:2888:3888 #server.A=B:C:D 其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。 接下来,在配置的dataDir目录下创建一个myid文件,里面写入一个0-255之间的一个随意数字,每个zk上这个文件的数字要是不一样的,这些数字应该是从1开始,依次写每个服务器。文件中序号要与dn节点下的zk配置序号一直,如:server.1=dn1:2888:3888,那么dn1节点下的myid配置文件应该写上1。 2.7.2启动 分别在各个dn节点启动zk进程,命令如下: bin/zkServer.sh start 然后,在各个节点输入jps命令,会出现如下进程: QuorumPeerMain 2.7.3验证 上面说的输入jps命令,若显示对应的进程,即表示启动成功,同样我们也可以输入zk的状态命令查看,命令如下: bin/zkServer.sh status 会出现一个leader和两个follower。 2.8HDFS+HA的结构图 HDFS配置HA的结构图如下所示: 上图大致架构包括: 1. 利用共享存储来在两个NN间同步edits信息。以前的HDFS是share nothing but NN,现在NN又share storage,这样其实是转移了单点故障的位置,但中高端的存储设备内部都有各种RAID以及冗余硬件,包括电源以及网卡等,比服务器的可靠性还是略有提高。通过NN内部每次元数据变动后的flush操作,加上NFS的close-to-open,数据的一致性得到了保证。 2. DN同时向两个NN汇报块信息。这是让Standby NN保持集群的最新状态的必须步骤。 3. 用于监视和控制NN进程的FailoverController进程。显然,我们不能在NN进程内部进行心跳等信息同步,最简单的原因,一次FullGC就可以让NN挂起十几分钟,所以,必须要有一个独立的短小精悍的watchdog来专门负责监控。这也是一个松耦合的设计,便于扩展或更改,目前版本里是用ZooKeeper(简称ZK)来做同步锁,但用户可以方便的把这个Zookeeper FailoverController(简称ZKFC)替换为其他的HA方案或leader选举方案。 4. 隔离(Fencing),防止脑裂,就是保证在任何时候只有一个主NN,包括三个方面:  共享存储fencing,确保只有一个NN可以写入edits。  客户端fencing,确保只有一个NN可以响应客户端的请求。  DN fencing,确保只有一个NN向DN下发命令,譬如删除块,复制块等等。 2.9角色分配 名称 Host 职责 NNA 10.211.55.12 zkfc NNS 10.211.55.13 zkfc DN1 10.211.55.14 zookeeper DN2 10.211.55.15 zookeeper DN3 10.211.55.16 zookeeper 2.10环境变量配置 这里列出了所有的配置,后面配置其他组件,可以参考这里的配置。 配置完成后,输入:. /etc/profile(或source /etc/profile)使之立即生效。验证环境变量配置成功与否,输入:echo $HADOOP_HOME,若输出对应的配置路径,即可认定配置成功。 注:hadoop2.x以后的版本conf文件夹改为etc文件夹了 配置内容如下所示: export JAVA_HOME=/usr/java/jdk1.7 export HADOOP_HOME=/home/hadoop/hadoop-2.6.0 export ZK_HOME=/home/hadoop/zookeeper-3.4.6 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOM 2.11核心文件配置 注:这里特别提醒,配置文件中的路径在启动集群之前,得存在(若不存在,请事先创建)。下面为给出本篇文章需要创建的路径脚本,命令如下: mkdir -p /home/hadoop/tmp mkdir -p /home/hadoop/data/tmp/journal mkdir -p /home/hadoop/data/dfs/name mkdir -p /home/hadoop/data/dfs/data mkdir -p /home/hadoop/data/yarn/local mkdir -p /home/hadoop/log/yarn core-site.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://cluster1</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>dn1:2181,dn2:2181,dn3:2181</value> </property> </configuration> hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>dfs.nameservices</name> <value>cluster1</value> </property> <property> <name>dfs.ha.namenodes.cluster1</name> <value>nna,nns</value> </property> <property> <name>dfs.namenode.rpc-address.cluster1.nna</name> <value>nna:9000</value> </property> <property> <name>dfs.namenode.rpc-address.cluster1.nns</name> <value>nns:9000</value> </property> <property> <name>dfs.namenode.http-address.cluster1.nna</name> <value>nna:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster1.nns</name> <value>nns:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://dn1:8485;dn2:8485;dn3:8485/cluster1</value> </property> <property> <name>dfs.client.failover.proxy.provider.cluster1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/data/tmp/journal</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/data/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/data/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.journalnode.http-address</name> <value>0.0.0.0:8480</value> </property> <property> <name>dfs.journalnode.rpc-address</name> <value>0.0.0.0:8485</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>dn1:2181,dn2:2181,dn3:2181</value> </property> </configuration> map-site.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>nna:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>nna:19888</value> </property> </configuration> yarn-site.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>dn1:2181,dn2:2181,dn3:2181</value> </property> <property> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>nna</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>nns</value> </property> <!--在namenode1上配置rm1,在namenode2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改 --> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> </property> <!--开启自动恢复功能 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--配置与zookeeper的连接地址 --> <property> <name>yarn.resourcemanager.zk-state-store.address</name> <value>dn1:2181,dn2:2181,dn3:2181</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>dn1:2181,dn2:2181,dn3:2181</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster1-yarn</value> </property> <!--schelduler失联等待连接时间 --> <property> <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name> <value>5000</value> </property> <!--配置rm1 --> <property> <name>yarn.resourcemanager.address.rm1</name> <value>nna:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>nna:8130</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>nna:8188</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>nna:8131</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm1</name> <value>nna:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm1</name> <value>nna:23142</value> </property> <!--配置rm2 --> <property> <name>yarn.resourcemanager.address.rm2</name> <value>nns:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>nns:8130</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>nns:8188</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>nns:8131</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>nns:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm2</name> <value>nns:23142</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/data/yarn/local</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/log/yarn</value> </property> <property> <name>mapreduce.shuffle.port</name> <value>23080</value> </property> <!--故障处理类 --> <property> <name>yarn.client.failover-proxy-provider</name> <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value> </property> <property> <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name> <value>/yarn-leader-election</value> </property> </configuration> hadoop-env.sh # The java implementation to use. export JAVA_HOME=/usr/java/jdk1.7 yarn-env.sh # some Java parameters export JAVA_HOME=/usr/java/jdk1.7 2.12slave 修改hadoop安装目录下的slave文件: dn1 dn2 dn3 2.13启动命令(hdfs和yarn的相关命令) 由于我们配置了QJM,所以我们需要先启动QJM的服务,启动顺序如下所示: 进入到DN节点,启动zk的服务:zkServer.sh start,之后可以输入zkServer.sh status查看启动状态,本次我们配置了三个DN节点,会出现一个leader和两个follower。输入jps,会显示启动进程:QuorumPeerMain 在NN节点上(选一台即可,这里我选择的是一台预NNA节点),然后启动journalnode服务,命令如下:hadoop-daemons.sh start journalnode。或者单独进入到每个DN输入启动命令:hadoop-daemon.sh start journalnode。输入jps显示启动进程:JournalNode。 接着若是配置后,我们首次启动,需要格式化HDFS,命令如下:hadoop namenode –format。 之后我们需要格式化ZK,命令如下:hdfs zkfc –formatZK。 接着我们启动hdfs和yarn,命令如下:start-dfs.sh和start-yarn.sh,我们在nna输入jps查看进程,显示如下:DFSZKFailoverController,NameNode,ResourceManager。 接着我们在NNS输入jps查看,发现只有DFSZKFailoverController进程,这里我们需要手动启动NNS上的namenode和ResourceManager进程,命令如下:hadoop-daemon.sh start namenode和yarn-daemon.sh start resourcemanager。需要注意的是,在NNS上的yarn-site.xml中,需要配置指向NNS,属性配置为rm2,在NNA中配置的是rm1。 最后我们需要同步NNA节点的元数据,命令如下:hdfs namenode –bootstrapStandby,若执行正常,日志最后显示如下信息: 15/02/21 10:30:59 INFO common.Storage: Storage directory /home/hadoop/data/dfs/name has been successfully formatted. 15/02/21 10:30:59 WARN common.Util: Path /home/hadoop/data/dfs/name should be specified as a URI in configuration files. Please update hdfs configuration. 15/02/21 10:30:59 WARN common.Util: Path /home/hadoop/data/dfs/name should be specified as a URI in configuration files. Please update hdfs configuration. 15/02/21 10:31:00 INFO namenode.TransferFsImage: Opening connection to http://nna:50070/imagetransfer?getimage=1&txid=0&storageInfo=-60:1079068934:0:CID-1dd0c11e-b27e-4651-aad6-73bc7dd820bd 15/02/21 10:31:01 INFO namenode.TransferFsImage: Image Transfer timeout configured to 60000 milliseconds 15/02/21 10:31:01 INFO namenode.TransferFsImage: Transfer took 0.01s at 0.00 KB/s 15/02/21 10:31:01 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000000 size 353 bytes. 15/02/21 10:31:01 INFO util.ExitUtil: Exiting with status 0 15/02/21 10:31:01 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at nns/10.211.55.13 ************************************************************/ 2.14HA的切换 由于我配置的是自动切换,若NNA节点宕掉,NNS节点会立即由standby状态切换为active状态。若是配置的手动状态,可以输入如下命令进行人工切换: hdfs haadmin -failover --forcefence --forceactive nna nns 这条命令的意思是,将nna变成standby,nns变成active。而且手动状态下需要重启服务。 2.15效果截图 3.总结 这篇文章就赘述到这里,若在配置过程中有什么疑问或问题,可以加入QQ群讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

优秀的个人博客,低调大师

JeeSite 平台 Spring Boot 3 体验版发布,一个 Java 快速开发平台

引言 是时候为 Spring Boot 3 做准备了,2018年2月 Spring Boot 进入 2.0 时代,距今已经 5 年了。2022 年 11 月 Spring Boot 3.0 正式发布,它将基于 Spring Framework 6.0,并且需要 Java 17 版本,同时它也将是 Jakarta EE 9 的第一个 Spring Boot 版本。如今 Spring Boot 3.1 已经发布,也带来了非常好的新特性,同时也支持了 Java 20。 为跟近技术时代,周边生态依赖库大部分也对 Spring Boot 3 做了相应支持,所以JeeSite 是时候发布Spring Boot 3 版本了。 同时 JeeSite 对 Spring Boot 2 的版本将持续更新,请大家放心使用。 技术栈 JDK 17+ Servlet 5.0+ Jakarta 6.0.0 Spring Boot 3.1.1 Apache Shiro 2.0.0 Spring Cloud 2022.0.3 Spring Cloud Alibaba 2022.0.0 Spring Framework 6.0.10 OpenAPI 3 and Springdoc 2.0 Atomiko Transactions 6.0 Spring Boot Admin 3.1 Flowable 7.0.0 等等众多依赖更新 Vue分离端 Ant Design Vue 4.0.0 功能国际化语言包完善 等等众多依赖更新 下载地址 JeeSite:https://gitee.com/thinkgem/jeesite4/tree/v5.springboot3/ JeeSite Cloud:https://gitee.com/thinkgem/jeesite4-cloud/tree/v5.springboot3.cloud/ JeeSite Vue:https://gitee.com/thinkgem/jeesite-vue/tree/next/ 我可以升级上来吗? 可以,自JeeSite 4版本开始,JeeSite团队就非常重视从旧版本升级的问题,除了向下兼容,我们也抛弃一些必要的变更。如果你对JeeSite改动不大,业务代码上升级是比较容易的,后面我们将在官方文档补充升级方法。

优秀的个人博客,低调大师

Java 利用SpringBoot为Android,iOS等移动平台搭建简单的Restful后台接口平台

作为移动端开发者来说,一般情况下,我们是不需要管理后台接口,只需要调用就可以了;但有时候,我们想要自己来实现接口,就得需要搭建自己的后台接口 当然实现方式有很多,我对Java比较熟悉,这里就说下用Java等框架来实现Restful接口。大学的时候,我们学过利用较为原始的Servelet来实现,当然会显得很臃肿,写起来也很麻烦,所以这里就利用SpringBoot框架来实现,大量的注解会让我们实现起来很方便,也省去了很多配置 这里我使用Intellij Idea编译器来创建工程,这里的选项有很多,现在一步步来创建工程 如果没有Spring Initializr这个选项,就在插件配置中安装即可,这里就不再赘述 接下来就直接下一步,现在我们到项目中的结构看一下 重点来看下TestController.java这个类 package springdemo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** * Created by on 2018/5/7. */ @RequestMapping //是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径 @RestController //用来返回Json public class TestController { /** * 注解中的第一个参数是访问的路径,第二个参数是请求方式 * @return */ @RequestMapping(value = "/info",method = RequestMethod.GET) public Info getInfo(){ Info info = new Info(); info.id = "59192"; info.data = "It's name is too complaint..."; return info; } } 代码很简单,省去了很多配置 运行来看下效果: 本地访问没有问题,结果也是JSON数据。 如果要部署到自建的Tomcat容器中也很简单,将项目打成.jar或者.war即可,需要访问数据库,利用现有的ORM框架,也只需要配置一下就可以了 以上就是很简单的后台接口开发,如今很多项目已经开发向微服务靠拢了(或者直接利用AWS等,开发者只管自己的业务,其他的都是现成的,工作量少了很多),或者是直接node.js实现后台接口,所以技术的发展很快,但是只要掌握基本的原理,一门新技术也是手到擒来 当然大部分业务都是简单的CURD(增删改查),上手很容易的,初学者很快就能掌握 PS:补一个很简单的demo,我会定时更新Springboot的各种用法 https://github.com/helang1991/springboot

优秀的个人博客,低调大师

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

一、申请微信认证 微信认证后将自动开通高级接口,获得高级接口中所有接口权限,无需二次申请。 高级接口含有获取用户基本信息、客服接口、语音识别等高级接口权限。 二、获取语音识别结果 开通语音识别功能,且该功能设置处于开启状态的公众帐号,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。 开启语音识别后的语音XML数据包如下: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <Format><![CDATA[Format]]></Format> <Recognition><![CDATA[深圳天气怎么样]]></Recognition> <MsgId>1234567890123456</MsgId> </xml> 参数说明: 参数 描述 ToUserName 开发者微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 语音为voice MediaID 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体 Format 语音格式:amr Recognition 语音识别结果,UTF8编码 MsgID 消息id,64位整型 三、使用中文分词提取关键特征 中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。 打个比方: 例如,识别结果为”深圳天气怎么样”,可分词为”深圳”,”怎么样”,三个词。我们提取出“天气”作为名词,“深圳”作为地点名词, 以下是SAE上的分词代码示例: <?php $str = "深圳天气怎么样"; $seg = new SaeSegment(); $ret = $seg->segment($str, 1); print_r($ret); //输出 if ($ret === false) var_dump($seg->errno(), $seg->errmsg()); ?> 识别结果如下: Array ( [0] => Array ( [word] => 深圳 [word_tag] => 102 [index] => 0 ) [1] => Array ( [word] => 天气 [word_tag] => 95 [index] => 1 ) [2] => Array ( [word] => 怎么样 [word_tag] => 40 [index] => 2 ) ) //词性对应关系 POSTAG_ID_N = 95 (line 322) 名词 POSTAG_ID_NS_Z = 102 (line 357) 地名(名处词专指:“中国”) POSTAG_ID_D = 40 (line 207) 副词 三、程序实现 判断是否开启语音识别 private function receiveVoice($object) { if (isset($object->Recognition) && !empty($object->Recognition)){ $contentStr = "你发送的是语音,内容为:".$object->Recognition; }else{ $contentStr = "未开启语音识别功能或者识别内容为空"; } if (is_array($contentStr)){ $resultStr = $this->transmitNews($object, $contentStr); }else{ $resultStr = $this->transmitText($object, $contentStr); } return $resultStr; } 效果如下: 调用SAE分词 var_dump(segment("明天长沙天气怎么样")); function segment($str) { $seg = new SaeSegment(); $ret = $seg->segment($str, 1); if ($ret === false){ return; } $category = ""; $keyword = ""; foreach ($ret as $key => $value) { if ($value["word_tag"] == 95){ $category = $value["word"]; } if ($value["word_tag"] == 102){ $keyword = $value["word"]; } } if (!empty($category) && !empty($keyword)){ return array('category'=>$category, 'keyword'=>$keyword); }else{ return; } } 返回结果如下: array(2) { ["category"]=>string(6) "天气" ["keyword"]=>string(6) "长沙" } 这样就获知晓了用户要查询的功能是天气,城市名称是长沙。 功能查询 根据获得的功能类别及关键字,我们可以查询相应的城市天气预报。 include("segment.php"); $result = sinasegment($content); if (is_array($result)){ switch ($result['category']) { case "天气": $url = "http://api100.duapp.com/weather/?appkey=trialuser&city=".urlencode($result['keyword']); $output = file_get_contents($url); $contentStr = json_decode($output, true); break; case "空气": $url = "http://api100.duapp.com/airquality/?appkey=trialuser&city=".urlencode($result['keyword']); $output = file_get_contents($url); $contentStr = json_decode($output, true); break; default: $contentStr = "还不支持这一功能:".$result['category']; break; } }else{ $contentStr = "不能理解你的内容:".$content; } 四、效果演示 本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4906860.html ,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册