2020年4月

试图在没学过C#的前提下编译GARbro。

遇到的坑:

  1. SchemeBuilder可以直接删掉;

  2. 该项目似乎历史久远,项目的sln文件还是VS2013版本建立的,但是NuGet在VS2017版本开始,成为了VS的内部组件之一,对于项目.csproj文件的内容有着不同的要求。以前的版本似乎是要求一定要有.nuget/NuGet.targets文件,但是新版VS不需要也无法产生该文件,这时候可以通过用文本编辑器直接删除配置文件中的相关部分解决可能出现的报错。

    问题根源的代码段:

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
      <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
      </PropertyGroup>
      <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    </Target>

    当然,两者相对位置自由,只要删了这两段就没问题了。

  3. 不知为啥我坑爹的VS2019没有自带nuget.org的在线源= = 弄了老半天说找不到包,结果一看只有一个100多M的离线本地源。。添加方式见:https://docs.microsoft.com/en-us/azure/devops/artifacts/nuget/upstream-sources?view=azure-devops

    这里只留一个关键信息,防止官方文档翻车-> https://api.nuget.org/v3/index.json

代码高亮使用的是来自zhantong的HighlightJs

LaTeX支持使用的是来自zyuzhi的MarkdownKatex

记得按照教程把插件文件夹名改了。

MarkdownKatex插件需要JQuery支持。整了老半天,原来typecho默认没有用js框架,控制台里的$$$似乎是Firefox自带的,我就说怎么整老半天katex打死不出来,报错说$不存在。

到footer.php里面加上对bootstrap的<script>引用标签就好了。

hato-1

主要参照这个:https://www.linode.com/docs/databases/hadoop/how-to-install-and-set-up-hadoop-cluster/

官方文档不花花绿绿的,不好看

然后就是后期遇到的一些小问题:

  1. 所有服务器都要改/etc/hosts,但是主服务器master和从服务器slave的侧重点不完全一样。主服务器配hosts的目的是有效而顺利地访问从服务器(不然在hadoop配置文件里写一堆ip估计不见得很爽),所以要把其他服务器的ip都配置正确,本机解析为localhost问题也不大;从服务器的话,只需要与主服务器(以及自身)打交道,所以一定要把主服务器的hosts域名配置正确。不然可能的情况之一就是服务跑起来了,但是主服务器报告hdfs空间大小为0。这个问题可以在datanode的日志文件中看出来。

    另外一个是,最好把自身的hosts名称(在此称作域名)从localhost改一下,变成和主机访问的一致,不然在访问hadoop的网络管理界面时,它会把hosts中域名相同的删减到只剩一个。这个时候千万不要以为是节点没跑起来,别问我怎么知道的

    然而更为有效的方式是注释掉127.0.0.1::1两行,然后再修改/etc/hostname为设置的节点域名。这个更改可以通过hostname -f看出来,这样既可以让hdfs正常识别出datanode的名称,又能让yarn正常跑任务。我遇到的情况有两种:一是yarn任务一直失败,看容器日志可以发现子容器一直在访问不存在的本机RPC地址(调整yarn.app.mapreduce.am.env / mapreduce.map.env更改日志详细程度),然而这个访问本来应该是朝着ApplicationMaster所在节点发送的,这是ApplicationMaster所在节点把自身域名解析到127.0.0.1造成的;第二个是把localhost解析到127.0.0.1,这个会导致hdfs节点显示异常。

  2. 注意iptables防火墙可能导致文件存储失败。懒人模式:iptables -F生产环境千万别用!

  3. 一定要记得在yarn中显式声明主节点的域名,否则yarn可能认为集群中无节点:https://stackoverflow.com/questions/32727675/slave-nodes-not-in-yarn-resourcemanager

    原理是yarn中默认的访问主节点的地址是0.0.0.0,仔细想想也会发现根本不可能访问到任何东西= =

  4. 如果因为你的电脑很穷酸所以需要限制单次任务中yarn分配的内存的话,需要设置两个地方:https://stackoverflow.com/questions/24233963/hadoop-yarn-how-to-limit-requestedmemory

    一是yarn-site.xml中的yarn.scheduler.maximum-allocation-mb选项;

    二是mapred-site.xml中的yarn.app.mapreduce.am.resource.mb选项。

    注意需要确保后者不大于前者(非则就会报出无法分配资源的情况,因为最小申请大小大于最大分配大小)。

附带常用命令:

命令行查看当前hdfs集群状态:

hdfs dfsadmin -report

访问/修改hdfs内文件:

hdfs dfs -ls /  # 等价于ls /,注意这里好像加不了-al一类的参数
hdfs dfs -put <local_file> <hdfs_file>  # 传文件进去
hdfs dfs -get <hdfs_file> <local_file>  # 取文件出来