Hadoop RPC 解析
RPCRPC由四个模块组成:1、通信模块。两个相互协作的通信模块实现请求-应答协议,它们在客户和服务器之间传递请求和应答消息,一般不会对数据包进行任何处理。请求–应答协议的实现方式有同步方式和异步方式两种。同步模式下客户端程序一直阻塞到服务器端发送的应答请求到达本地; 而异步模式不同,客户端将请求发送到服务器端后,不必等待应答返回,可以做其他事情,待服务器端处理完请求后,主动通知客户端。在高并发应用场景中,一般采用异步模式以降低访问延迟和提高带宽利用率。2、Stub 程序(代理程序)。客户端和服务器端均包含Stub程序,可将之看做代理程序。它使得远程函数调用表现得跟本地调用一样,对用户程序完全透明。在客户端,它表现得就像一个本地程序,但不直接执行本地调用,而是将请求信息通过网络模块发送给服务器端。此外,当服务器发送应答后,它会解码对应结果。在服务器端,Stub程序依次进行解码请求消息中的参数、调用相应的服务过程和编码应答结果的返回值等处理。3、调度程序。调度程序接收来自通信模块的请求消息,并根据其中的标识选择一个Stub程序进行处理。通常客户端并发请求量比较大时,会采用线程池提高处理效 ...
NameNode元数据及checkpoint分析
NamNodeNameNode 的主要作用是
负责管理文件系统的命名空间、集群配置信息和存储块的复制;
维护着整个文件系统的文件目录树和文件根目录的元信息和每个文件对应的数据块列表;
接收用户的操作请求;
管理文件与block之间的关系,block与DataNode之间的关系;
NameNode 的启动流程为:
Loading fsimage - 从fsimage file中读取最新的文件系统的元数据快照(最近生成的fsimage_xx)
Loading edits - 读取包含fsimage_xx之后的所有tx的edit logs并将edit logs中的操作从新操作一遍更新到元数据中,则此时NN更新到上次停止时的状态。
checkpoint - 将当前状态写入新的checkpoint中,即产生一个新的fsimage_xx文件
Safe mode - 等待各个datanodes report各自的block信息,形成blockMap,然后退出安全模式。
此时NN启动结束,等待接受用户的操作请求,并把各种操作写入新的edit log中,定期进行checkpoint,对元数据进行 ...
HDFS ReplicationMonitor副本监控线程解析
上篇文章介绍了HDFS中副本数的维持,当某个block的副本数大于期望的副本数时,通过BlockManager.processOverReplicatedBlock,对副本进行处理,根据规则选择要删除副本的dn,将dn和block放入invalidateBlocks中,然后ReplicationMonitor线程会从中取出block副本进行删除。当某个block的副本数少于期望的副本数时,通过BlockManager.processMisReplicatedBlock,对副本根据其复制优先级进行划分,放入neededReplications,然后ReplicationMonitor线程会从中取出block副本进行复制。
ReplicationMonitor线程ReplicationMonitor实现了Runnable接口,通过FSNameSystem.startCommonServices -> blockManager.activate(conf) -> this.replicationThread.start()被启动,主要作用就是计算DataNode工作,并将复制 ...
HDFS HA机制解析
HA整体架构![HA整体架构图](/blogimgs/HDFS HA机制解析/ha架构图.png “HA整体架构图”)
从上图中,我们可以看出NameNode的高可用架构主要分为下面几个部分:
Active NameNode和Standby NameNode:两台NameNode形成互备,一台处于Active状态,为主NameNode,另外一台处于Standby状态,为备NameNode,只有主NameNode才能对外提供读写服务。
主备切换控制器ZKFailoverController:ZKFailoverController作为独立的进程运行,对NameNode的主备切换进行总体控制(ZKFailoverController是抽象类,它的实现类是DFSZKFailoverController)。ZKFailoverController通过HealthMonitor线程能及时检测到NameNode的健康状况,在主NameNode故障时借助Zookeeper实现自动的主备选举和切换,当然NameNode目前也支持不依赖于Zookeeper的手动主备切换。
为啥把监控分开 显然,我 ...
hexo启动4000端口无法访问
hexo blog启动流程
新建一个目录hexo-demo
按住shift,点击鼠标右键,选择在此处打开命令窗口
hexo init (第一次创建blog)
npm install 安装依赖
hexo g 生成静态文件
hexo s 启动hexo服务, debug模式启动hexo s --debug,指定端口启动 hexo server -p port
hexo d 部署blog到github
升级hexo和主题在blog目录执行 npm update
所遇问题及解决方法运行正常时会显示如下
1INFO Hexo is running at http://0.0.0.0:4000/. Press Ctrl+C to stop.
这时打开localhost:4000可以看到hexo的博客。
如果localhost:4000打开失败,一直处于缓冲状态时,可能的原因很多,我遇到两种情况
如果不执行npm install,会导致localhost:4000打开失败
4000端口占用,一般情况下,端口占用,hexo会提示FATAL Port 4000 has been used. Try ...
HDFS维持副本平衡的流程
HDFS上文件的block默认会存放3个副本,一个副本存在一个rack的某个dn上,第二个和第三个副本存放在另一个机架的某两个dn上,nn会维持block的副本平衡,但是当集群上的副本数超过3个时,nn会删除那些节点上的副本来维护副本平衡呢?当集群上的副本数少于3个时,会原则那些节点作为原点进行复制呢?那就查下代码看nn是怎么搞的
HDFS删除多余副本多余副本的场景
rack0上有一个副本,rack1上有两个副本,此时rack0的dn下线,nn维持副本平衡,复制一个副本到其它的rack上,3副本平衡,但是下线的dn又重新上线了,这就出现了4个副本,需要删除一个副本
调用hadoop fs -setrep -R 3相关命令人为修改副本的个数,
删除多余副本BlockManager主要管理block存储在集群中的相关信息,查看其processOverReplicatedBlock方法,处理多余副本,
1234567891011121314151617181920212223242526272829303132/** * 查出有多少个副本 * 如果有多余的副本,则调用chooseExc ...
Spark编译与部署
编译spark-1.6.1使用maven编译编译spark时需要先将maven(maven需要3.3以上)的内存加大,执行命令export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
然后执行编译命令(编译继承hadoop和hive的版本)mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -DskipTests clean package
此处只是将spark源码进行编译,并没有打包成可部署的tar包,类似可部署tar解压之后的结果,但包含源码和别的jar包。为了部署方便还是要将spark编译为tar包,执行命令./make-distribution.sh --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -DskipTests -Dhadoop.version=2.6.0执行此条命令时可能需要等待一段时间才会显示编 ...
linux配置ssh并更改默认端口
各机器打通ssh
安装 ssh(hadoop 用户) mkdir .ssh #( __创建的.ssh目录的权限必须是 700__,否则会导致ssh不通 ) ssh-keygen -t rsa cat .ssh/id\_rsa.pub >> .ssh/authorized\_keys chmod 600 .ssh/authorized_keys #(修改文件权限,否则不起作用 ) 必须为600执行完以后,可以在本机上测试下,用 ssh连接自己,即:ssh localhost (或 ssh master),如果不幸还是提示要输入密码,说明还没起作用( ssh user@hostname –v 是debug 模式)
在其它机器上生成公钥、密钥,并将公钥文件复制到 mastera) 以 hadoop身份登录其它二台机器 slave01、 slave02,执行 ssh-keygen -t rsa -P '' 生成公钥、密钥b) 然后用 scp命令,把公钥文件发放给 master(即:刚才已经搞定的那台机器)slave01上: scp .ssh/id\_rsa. ...
python开发环境安装及restapi demo开发
linux下安装linux中一般默认安装python,在命令行中输入python,查看当前版本
1234$ pythonPython 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
在安装python之前先安装sqlite-devel,否则随后运行django时可能会报错,错误内容为django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3。运行命令
1yum install sqlite-devel
当前版本是2.6.6,安装的版本是2.7.11
下载python的二进制包 Python-2.7.11.tgz 并解压
进入解压后的目录中 运行 如下命令
123./configuremakemake install ( ...
将sublime text 2 添加到右键菜单中
将sublime text2添加到右键菜单中Windows安装sublime text2,右键文件不能使用sublime text打开,右键中并无此快捷键,所以需要手动添加使用sublime text编辑的选项。
将Sublime Text添加到右键可以概括为一个统一的功能,就是讲应用程序的快捷键添加到鼠标右键中。
修改注册表
开始->运行->regedit打开注册表编辑器。(快捷键 window+R 输入regedit 回车)
选择HKEY_CLASSES_ROOT->*->shell,然后右键选择新建项,命名为Edit with Sublime Text(这个值就是鼠标右键菜单中显示的名称,可以随便改),然后在右边空白区域右键新建->字符串值,命名为Icon(这个不能改,这里设置的是的右键菜单中显示的图标),值为D:\Program Files\Sublime Text 2\sublime_text.exe,0。
在Edit with Sublime Text下右键新建->项,命名为Command,然后修改右边的默认值为D:\Program F ...